控制器必须实现 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()
大部分时间都有效,但有时当我从第 3 方调用我的应用程序时 api 我会收到此错误。
Controllers must implement Zend\Mvc\InjectApplicationEventInterface to use this plugin
我没有看到通话有任何不同。我只需要澄清这个错误代表什么,所以如果我需要更改应用程序的设计,我应该这样做。
这只是一个猜测,但我认为您通过服务管理器使用的 params controller 插件在某些情况下没有分配控制器,这就是为什么您应该只使用它 在 控制器中。您应该能够在 https://github.com/zendframework/zendmvc/blob/master/src/Controller/Plugin/Params.php#L110.
处调试它
如果您访问无效的路由或类似的东西,可能会发生这种情况。
此外,我认为您应该从当前路由匹配中获取参数而不是参数 controller 插件,例如
$event->getRouteMatch()->getParams();
的确,您应该在使用之前检查路由匹配是否存在。
我有一个代码在 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()
大部分时间都有效,但有时当我从第 3 方调用我的应用程序时 api 我会收到此错误。
Controllers must implement Zend\Mvc\InjectApplicationEventInterface to use this plugin
我没有看到通话有任何不同。我只需要澄清这个错误代表什么,所以如果我需要更改应用程序的设计,我应该这样做。
这只是一个猜测,但我认为您通过服务管理器使用的 params controller 插件在某些情况下没有分配控制器,这就是为什么您应该只使用它 在 控制器中。您应该能够在 https://github.com/zendframework/zendmvc/blob/master/src/Controller/Plugin/Params.php#L110.
处调试它如果您访问无效的路由或类似的东西,可能会发生这种情况。
此外,我认为您应该从当前路由匹配中获取参数而不是参数 controller 插件,例如
$event->getRouteMatch()->getParams();
的确,您应该在使用之前检查路由匹配是否存在。