2016-11-02 133 views
1

我有一個代碼,在頁面以這種方式呈現在Module.php之前執行。控制器必須實現InjectApplicationEventInterface

$eventManager->attach(MvcEvent::EVENT_RENDER, function(MvcEvent $event) { 

    /** @var ServiceManager $sm */ 
    $sm = $event->getParam('application')->getServiceManager(); 

    $logger = $sm->get(LogService::class)->getLogger(); 
    $themeResolver = $sm->get(ThemeResolveService::class); 

    $df = $sm->get(DataFetchService::class); 

    $params = $sm->get('ControllerPluginManager')->get('params'); 
    $security = $sm->get(SecurityService::class); 

    try { 
     $cleanedParams = $security->clean($params->fromRoute()); 
    } catch (\Exception $e) { 
     echo $e->getMessage(); 
     $logger->info($e->getMessage()); 
     die(); 
    } 

    /** theme resolving code **/ 
} 

這個問題我已經是這一行:

$cleanedParams = $security->clean($params->fromRoute()); 

$params->fromRoute()作品時代的大多數,但有時當我打電話從第三方API我的申請,我得到這個錯誤。

Controllers must implement Zend\Mvc\InjectApplicationEventInterface to use this plugin

我沒有看到任何東西,是調用不同。我只需要澄清這個錯誤代表什麼,所以如果我需要改變應用程序的設計,我應該這樣做。

回答

1

這只是一個猜測,但我認爲PARAMS 控制器插件,它要通過服務管理使用沒有在某些情況下分配的控制器,這就是爲什麼你應該只使用它的控制器。您應該能夠在https://github.com/zendframework/zendmvc/blob/master/src/Controller/Plugin/Params.php#L110進行調試。

也許這發生如果你訪問一個無效的路線或類似的東西。

Futhermore在我看來,你應該從目前的路徑匹配的PARAMS代替PARAMS 控制器插件,像

$event->getRouteMatch()->getParams(); 

事實上,你應該檢查wheter一個routematch使用它之前存在。

相關問題