Zend Framework 2模块在控制器onBootstrap之间共享变量

时间:2013-01-02 19:38:45

标签: php zend-framework2

是否可以在Module.php中创建变量甚至共享对象(如DB适配器),以便在所有视图控制器中使用? (Zend Framework 2)

例如:

class Module 
{
    public function onBootstrap(MvcEvent $e)
    {

        $moduleConfig = $e->getServiceManager()->get('Config')
    }
}

在控制器中,以某种方式使用:

进行访问
$this->moduleConfig['db']

在上面我知道这只是数据库适配器的配置数组,但它怎么会工作?

我看到可以在控制器操作中执行此操作:

$config = $this->getServiceLocator()->get('Config')
$dba = new DbAdapter($config['db']);

我不想在每个需要配置的地方都这样做。我怎么能这样做:$ this-> config ??所以它适用于所有行动。更好的是,如何在整个模块中做到这一点?我知道我这一切都错了,但在ZF1中我们有Zend_Registry :: get()这样的简单事情。我正在阅读文档和各种各样的文章,但总是有一些假设,我只是迷路了。所以我真正想要的是: A)全球可访问的配置项, B)全局可访问的数据库适配器

我只想在我的控制器中调用$ this-> db或$ this-> config->项。这可能吗?我知道我错过了一些非常简单的事情。

我也尝试使用$ this-> getServiceLocator() - > get('Config');在我的__construct中设置$ this-> config但我知道服务定位器在构造期间尚不可用。我尝试在模块的onBootstrap中设置preDispatch,但我似乎无法将这些项目放入我的控制器中。

仅供参考,我确实在我的global.php中有这个(不,它没有留在那里,只是例子):

'db' => array(
        'driver' => 'Pdo',
        'dsn'   => 'mysql:dbname=mydb;host=localhost;',
        'username' => 'root',
        'password' => '',
        'driver_options' => array(
            PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
        ),

    ),

我可以使用getServiceLocator()访问任何操作中的该项和其他项。我希望这些项目可用作我的控制器属性,如$ this-> config-> item。

我感谢任何指导!谢谢!

0 个答案:

没有答案