在config / autoload / global.php中我只有我的数据库的配置。 在我的模型中,我有:
public function __construct($adapter = null)
{
if ($adapter) {
$this->adapter = $adapter;
} else {
... //here I need to get the config without serviceLocator
}
}
public function attach(EventManagerInterface $events)
{
$sharedEvents = $events->getSharedManager();
$this->listeners[] = $sharedEvents->attach("*", "redirect", array($this, "onRedirect"));
}
public function detach(EventManagerInterface $events)
{
foreach ($this->listeners as $index => $listener)
{
if ($events->detach($listener))
{
unset($this->listeners[$index]);
}
}
}
public function onRedirect(EventInterface $e)
{
...
}
原因很简单。我试图在触发事件时向数据库中添加一些内容,但我无法在侦听器上获取serviceLocator。我不知道为什么。
那么......是否可以在没有serviceLocator的情况下获取配置文件?
答案 0 :(得分:0)
你应该能够通过像任何其他服务一样的工厂在你的听众中获得ServiceLocator
:
<?php
namespace Application\Listener\Factory;
use Zend\ServiceManager\FactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;
use Application\Listener\SomeListener;
/**
* Factory for creating the listener
*/
class SomeListenerFactory implements FactoryInterface
{
/**
* Create SomeListener
*
* @param ServiceLocatorInterface $serviceLocator
* @return SomeListener
*/
public function createService(ServiceLocatorInterface $serviceLocator)
{
$config = $serviceLocator->get('config');
$adapter = // create adapter using config and use it to create your listener
return new SomeListener($adapter);
}
}
在module.config.php
:
'service_manager' => array(
'factories' => array(
'Application\Listener\SomeListener' => 'Application\Listener\Factory\SomeListenerFactory',
)
)
现在,您可以随时随地通过服务管理器获取听众:
$someListener = $serviceManager->get('Application\Listener\SomeListener');
如果你真的想要在你的课堂内进行配置(我没有看到为什么这是必要的并且它违反了ZF2原则)你可以包括你的配置文件:
您的global.config.php
文件
<?php
return array(
'key' => 'value'
);
您可以使用php include:
简单地获取内容function fetchConfig()
{
include("path/to/global.config.php");
}