为了保持我的代码DRY,我希望能够定义“交叉控制器”变量。
经典示例是我想访问我的bootstap中加载的一些配置项。
实现这一目标的最佳实践方法是什么?
添
答案 0 :(得分:7)
您始终可以使用Di容器。
在Di中注册组件后,可通过魔术方法在控制器中使用该组件。例如:
// Bootstrap
$configFile = ROOT_PATH . '/app/config/config.ini';
// Create the new object
$config = new \Phalcon\Config\Adapter\Ini($configFile);
// Store it in the Di container
$this->di->setShared('config', $config);
在控制器中它就像:
一样简单$config = $this->config;
如果创建基本控制器类,则可以根据需要在视图中传递这些对象,如下所示:
$this->view->setVar('config', $this->config);
最后,Di容器也可以充当注册表,您可以在其中存储可能要在应用程序中使用的项目。
有关引导和访问控制器中对象的示例,请查看phalcon/website存储库。它实现了自举和基本控制器模式等。
答案 1 :(得分:2)
以下是我的设置。
[PHP] 5.4.1
[phalcon] 1.2.1
以下是我的引导程序的摘录。(/ app-root / public / index.php)
$di = new \Phalcon\DI\FactoryDefault();
// I'll pass the config to a controller.
$di->set('config', $config);
$application = new \Phalcon\Mvc\Application();
$application->setDI($di);
echo $application->handle()->getContent();
这是我的基本控制器的摘录。(/ app-root / app / controllers / ControllerBase.php)
class ControllerBase extends Phalcon\Mvc\Controller
{
protected $config;
protected function initialize()
{
$this->config = $this->di->get('config');
$appName = $this->config->application->appName;