从 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()    
        );
    }
}