我有许多实体包含许多不同的字段,但所有这些字段包括:IP,时间戳和'控制器/操作'。关联的表单为除这三个之外的所有实体属性提供字段。我宁愿不提供隐藏字段,而是在表单提交后填充这3个字段。
这就是为什么我创建了一个Doctrine Subscriber(根据here)并且正在听“onPersist'事件。我已成功设置IP和时间戳字段,并将其从订阅者中保存到我的数据库中。在请求的控制器中,我可以$this->params('controller');
或$this->params('action');
来获取我需要的内容。但是,我在订阅者中检索所请求的Controller / Action时遇到了一些麻烦。
我已尝试在订阅者和订阅者工厂上根据here实施Zend\Mvc\InjectApplicationEventInterface
,但我最终得到的是一个空的实例,而不是包含我需要的实际实例。我还尝试转储各种服务管理器的内容(IE:ControllerLoader,ControllerPluginManager和ViewHelperManager),但没有看到任何&Zever \ Mvc \ MvcEvent' Zend \ Mvc \ MvcEvent'
我有一个预感,我需要的是通过其中一个服务经理获得的。为了弄清楚如何检索Zend\Mvc\MvcEvent
的现有实例,我应该查看什么?此外,我假设最好从我的订阅者工厂内检索它,如果这不是最好的方法,请纠正我。
答案 0 :(得分:2)
您可以为您的Doctrine订阅者创建一个工厂,并从那里注入MvcEvent
。您可以从整个应用程序生命周期内共享的Application
对象中检索它。
<强>配置强>
'doctrine' => [
'eventmanager' => [
'orm_default' => [
'subscribers' => [
'MyModule\SomeListener',
]
]
]
]
<强>工厂强>
class SomeListenerFactory
{
public function __invoke($serviceLocator)
{
return new SomeListener(
$serviceLocator->get('Application')->getMvcEvent()
);
}
}