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