У меня есть код, который выполняется, прежде чем страница отображается в 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
Я не вижу ничего, что отличается в звонках. Мне просто нужно уточнить, что представляет собой эта ошибка, поэтому, если мне нужно изменить дизайн приложения, я должен это сделать.
Это всего лишь предположение, но я думаю, что параметры контроллер Плагин, который вы используете через сервис-менеджер, в некоторых случаях не имеет назначенного контроллера, поэтому его следует использовать только внутри контроллер. Вы должны быть в состоянии отладить его в https://github.com/zendframework/zendmvc/blob/master/src/Controller/Plugin/Params.php#L110.
Может быть, это происходит, если вы получаете доступ к неверному маршруту или что-то вроде этого.
Кроме того, по моему мнению, вы должны получить параметры из текущего матча маршрута вместо параметров контроллер плагин, как
$event->getRouteMatch()->getParams();
В самом деле, вы должны проверить, существует ли соответствие маршрута перед его использованием.
Других решений пока нет …