7

为了使我的代码保持干燥,我希望能够定义“跨控制器”变量。

经典示例是我想访问在我的引导程序中加载的一些配置项。

实现这一目标的最佳实践方法是什么?

蒂姆

4

2 回答 2

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存储库。它实现了引导和基本控制器模式等。

于 2012-11-02T01:49:31.460 回答
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;
于 2013-10-05T09:38:57.410 回答