访问 Zend Framework 2 中的模块配置
2022-08-30 12:34:13
如何从控制器访问我的模块配置?
如何从控制器访问我的模块配置?
我真的很惊讶这是多么晦涩难懂,因为我有完全相同的问题,找不到一个明确的答案。人们会认为ZF2文档会对此有所说明。无论如何,使用反复试验,我遇到了这个非常简单的答案:
$config = $this->getServiceLocator()->get('Config');
Module.php
$config = $e->getApplication()->getServiceManager()->get('Config');
而 是 的实例$e
Zend\Mvc\MvcEvent
通常,可以从任何有权访问全局服务管理器的位置访问配置,因为配置数组已注册为名为 的服务。(请注意大写的 C
。Config
这将返回 application.config..php(全局和本地)和 module.config.php 的并集的数组。然后,您可以根据需要访问数组元素。
尽管OP现在已经很老了,但我希望这能为某人节省一个小时或更长时间才能得到这个答案。
您究竟想在控制器中对模块配置执行哪些操作?通过让 DI 容器将完全配置的对象注入控制器无法做到这一点吗?
例如,Rob Allen 的 Getting Started with Zend Framework 2 给出了这样一个示例,即将配置的 Zend\Db\Table 实例注入控制器:
return array(
'di' => array(
'instance' => array(
'alias' => array(
'album' => 'Album\Controller\AlbumController',
),
'Album\Controller\AlbumController' => array(
'parameters' => array(
'albumTable' => 'Album\Model\AlbumTable',
),
),
'Album\Model\AlbumTable' => array(
'parameters' => array(
'config' => 'Zend\Db\Adapter\Mysqli',
)),
'Zend\Db\Adapter\Mysqli' => array(
'parameters' => array(
'config' => array(
'host' => 'localhost',
'username' => 'rob',
'password' => '123456',
'dbname' => 'zf2tutorial',
),
),
),
...
如果需要在应用程序完全引导后执行其他初始化,则可以将 init 方法附加到 Module 类中的引导事件。Matthew Weier O'Phinney的一篇博客文章给出了这个例子:
use Zend\EventManager\StaticEventManager,
Zend\Module\Manager as ModuleManager
class Module
{
public function init(ModuleManager $manager)
{
$events = StaticEventManager::getInstance();
$events->attach('bootstrap', 'bootstrap', array($this, 'doMoarInit'));
}
public function doMoarInit($e)
{
$application = $e->getParam('application');
$modules = $e->getParam('modules');
$locator = $application->getLocator();
$router = $application->getRouter();
$config = $modules->getMergedConfig();
// do something with the above!
}
}
这两种方法中的任何一种都能解决问题吗?