2016-03-07 46 views
0

我有很多包含許多不同字段的實體,但都包含:IP,時間戳和'控制器/操作'。關聯的表單提供了除這三個以外的所有實體屬性的字段。我寧願不提供隱藏的字段,而是在表單提交後填充這3個字段。從ZF2的Doctrine2用戶中檢索請求的控制器/動作

這就是爲什麼我創建了Doctrine訂戶(根據here)並且正在傾聽'onPersist'事件。我已經成功地設置了IP和時間戳記字段,並將它們保存在用戶的數據庫中。從請求的控制器內部,我可以只做$this->params('controller');$this->params('action');來獲得我需要的東西。但是,我在檢索用戶內部請求的控制器/操作時遇到了一些麻煩。

我試着在用戶和訂戶的工廠上根據here執行Zend\Mvc\InjectApplicationEventInterface,但最終我得到的只是一個空實例,而不是包含我需要的實例。我也嘗試傾銷各種服務經理(IE:ControllerLoader,ControllerPluginManager和ViewHelperManager)的內容,但沒有看到'Zend \ Mvc \ MvcEvent'的任何實例

我有一個預感,我需要的是可以通過一個的服務經理。爲了弄清楚如何檢索Zend\Mvc\MvcEvent的現有實例,我應該考慮什麼?此外,我假設最好從工廠內爲我的訂閱者檢索它,如果這不是最好的方法,請糾正我。

回答

2

您可以爲您的Doctrine用戶創建一個工廠,並從那裏注入MvcEvent。您可以從整個應用程序生命週期內共享的Application對象中檢索它。

配置

'doctrine' => [ 
    'eventmanager' => [ 
     'orm_default' => [ 
      'subscribers' => [ 
       'MyModule\SomeListener', 
      ] 
     ] 
    ] 
] 

class SomeListenerFactory 
{ 
    public function __invoke($serviceLocator) 
    { 
     return new SomeListener(
      $serviceLocator->get('Application')->getMvcEvent()  
     ); 
    } 
} 
+0

謝謝你,我有工廠和服務定位,只是不知道如何得到它的MvcEvent。我也沒有意識到有一個主要的應用程序對象將在未來派上用場。 –

相關問題