phalcon 自动加载_Phalcon 的 bootstrap.php 自动加载完成;非常人性化的设计

该博客详细介绍了如何使用Phalcon PHP框架初始化应用程序。包括设置依赖注入容器(DI),初始化session、config、loader、url、router、view、cache等服务,并提供了数据库连接、模型元数据、视图及Volt模板引擎的配置方法。通过加载配置文件、注册目录、设置路由、处理异常等步骤,确保了Phalcon应用的正常运行。
摘要由CSDN通过智能技术生成

* Bootstraps the application*/

use PhalconDIFactoryDefault as PhDi,PhalconConfigas PhConfig,PhalconSessionAdapterFilesas PhSession,PhalconLoaderas PhLoader,PhalconMvcUrlas PhUrl,PhalconMvcRouteras PhRouter,PhalconDbAdapterPdoMysql as PhMysql,PhalconException as PhException,PhalconMvcApplicationas PhApplication,PhalconMvcViewas PhView,PhalconMvcViewEngineVoltas PhVolt,PhalconMvcModelMetadataMemoryas PhMetadataMemory,PhalconCacheFrontendOutputas PhCacheFront,PhalconCacheBackendFile as PhCacheBackFile,PhalconCacheBackendApcasPhCacheBackApc;classBootstrap

{private $di;/**

* Constructor

*

* @param $di*/

public function __construct($di)

{$this->di = $di;

}/**

* Runs the application performing all initializations

*

* @param $options

*

* @return mixed*/

public function run($options)

{$loaders = array('session',

'config',

'loader',

'url',

'router',

'view',

'cache',);try{foreach ($loaders as $service) {$function = 'init' . ucfirst($service);$this->$function();

}$application = newPhApplication();$application->setDI($this->di);return $application->handle()->getContent();

}catch (PhException $e) {echo $e->getMessage();

}catch (PDOException $e) {echo $e->getMessage();

}

}//Protected functions

/**

* Initializes the session

*

* @param array $options*/

protected function initSession($options = array())

{$this->di['session'] = function() {$session = newPhSession();$session->start();return $session;

};

}/**

* Initializes the config. Reads it from its location and

* stores it in the Di container for easier access

*

* @param array $options*/

protected function initConfig($options = array())

{$configFile = require(ROOT_PATH . '/app/var/config/config.php');//Create the new object

$config = new PhConfig($configFile);//Store it in the Di container

// Settings cones from the include

$this->di['config'] = $config;

}/**

* Initializes the loader

*

* @param array $options*/

protected function initLoader($options = array())

{$config = $this->di['config'];//Creates the autoloader

$loader = newPhLoader();$loader->registerDirs(array($config->application->controllersDir,

$config->application->modelsDir

)

);$loader->register();//Dump it in the DI to reuse it

$this->di['loader'] = $loader;

}/**

* Initializes the baseUrl

*

* @param array $options*/

protected function initUrl($options = array())

{$config = $this->di['config'];/**

* The URL component is used to generate all kind of urls in the

* application*/

$this->di['url'] = function () use ($config) {$url = newPhUrl();$url->setBaseUri($config->application->baseUri);return $url;

};

}/**

* Initializes the router

*

* @param array $options*/

protected function initRouter($options = array())

{$config = $this->di['config'];$this->di['router'] = function () use ($config) {$router = new PhRouter(false);$router->notFound(array("controller" => "index",

"action" => "notFound",)

);$router->removeExtraSlashes(true);foreach ($config['routes'] as $route => $items) {$router->add($route, $items->params->toArray())->setName($items->name);

}return $router;

};

}/**

* Initializes the database

*

* @param array $options*/

protected function initDatabase($options = array())

{$config = $this->di['config'];$this->di['db'] = function () use ($config) {return newDbAdapter(array('host' => $config->database->host,

'username' => $config->database->username,

'password' => $config->database->password,

'dbname' => $config->database->dbname,)

);

};

}/**

* Initializes the models metadata

*

* @param array $options*/

protected function initModelsMetadata($options = array())

{$this->di['modelsMetadata'] = function() {return newPhMetadataMemory();

};

}/**

* Initializes the view and Volt

*

* @param array $options*/

protected function initView($options = array())

{$config = $this->di['config'];$di = $this->di;/**

* Setup the view service*/

$this->di['view'] = function () use ($config, $di) {$view = newPhView();$view->setViewsDir($config->application->viewsDir);$view->registerEngines(array('.volt' => function ($view , $di) use ($config) {$volt = new PhVolt($view , $di);$voltOptions = array('compiledPath' => $config->application->voltDir ,

'compiledSeparator' => '_',);if ('1' == $config->application->debug) {$voltOptions['compileAlways'] = true;

}$volt->setOptions($voltOptions);$volt->getCompiler()->addFunction('tr',

function ($key) {return "Bootstrap::translate({$key})";

}

);return $volt;

},

'.phtml' => 'PhalconMvcViewEnginePhp', //Generate Template files uses PHP itself as the template engine

)

);return $view;

};

}/**

* Initializes the cache

*

* @param array $options*/

protected function initCache($options = array())

{$config = $this->di['config'];$this->di['viewCache'] = function () use ($config) {//Get the parameters

$frontCache = new PhCacheFront(array('lifetime' => $config->cache->lifetime));if (function_exists('apc_store')) {$cache = new PhCacheBackApc($frontCache);

}else{$backEndOptions = array('cacheDir' => $config->cache->cacheDir);$cache = new PhCacheBackFile($frontCache, $backEndOptions);

}return $cache;

};

}/**

* Translates a string

*

* @return string*/

public static functiontranslate()

{$return = '';$messages = array();$argCount = func_num_args();$di = PhDi::getDefault();$session = $di['session'];$config = $di['config'];$dispatcher = $di['dispatcher'];$lang = $dispatcher->getParam('language');if (function_exists('apc_store')) {$phrases = apc_fetch($lang . '-phrases');$language = apc_fetch($lang . '-language');

}else{$phrases = $session->get('phrases');$language = $session->get('language');

}$changed = false;if (!$phrases || $language != $lang || ('1' == $config->application->debug)) {require ROOT_PATH . '/app/var/languages/en.php';/**

* Messages comes from the above require statement. Not the best

* way of doing it but we need this for Transilex*/

$english = $messages;$phrases = $english;if ('en' !== $lang) {if (file_exists(ROOT_PATH . '/app/var/languages/' . $lang . '.php')) {/**

* Cleanup*/

$messages = array();require ROOT_PATH . '/app/var/languages/' . $lang . '.php';/**

* Messages comes from the above require statement. Not

* the best way of doing it but we need this for Transilex*/

$custom = $messages;foreach ($english as $key => $value) {$phrases[$key] = (!empty($custom[$key])) ? $custom[$key] : $value;

}

}$changed = true;

}if ($changed) {if (function_exists('apc_store')) {

apc_store($lang . '-phrases', $phrases);

apc_store($lang . '-language', $lang);

}else{$session->set('phrases', $phrases);$session->set('language', $lang);

}

}

}//If parameters were passed process them, otherwise return an

// empty string

if ($argCount > 0) {$arguments = func_get_args();//The first argument is the key

$key = $arguments[0];if (isset($phrases[$key])) {$return = $phrases[$key];//Any subsequent arguments need to replace placeholders

// in the target string. Unset the key and process the

// rest of the arguments one by one.

unset($arguments[0]);foreach ($arguments as $key => $argument) {$return = str_replace(":{$key}:", $argument, $return);

}

}

}return $return;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值