控制器必须实现InjectApplicationEventInterface


Controllers must implement InjectApplicationEventInterface

我有一个在Module.php中像这样呈现页面之前执行的代码。

$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

我看不出通话有什么不同。我只是需要澄清这个错误代表什么,所以如果我需要改变应用程序的设计,我应该这样做。

这只是一个猜测,但我认为params 控制器插件,你正在使用通过服务管理器在某些情况下没有分配控制器,这就是为什么你应该只使用它一个控制器。您应该能够在https://github.com/zendframework/zendmvc/blob/master/src/Controller/Plugin/Params.php#L110上调试它。

如果你访问了一个无效的路由或类似的情况,可能会发生这种情况。

此外,在我看来,你应该从当前路由匹配中获取参数,而不是从params 控制器插件中获取,比如

$event->getRouteMatch()->getParams();
相关文章:
  • 没有找到相关文章