2016-11-02 90 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使用它之前存在。

相关问题