events - 调度错误事件未连接到 AbstractController 上的共享事件
问题描述
我的错误页面没有按计划工作。我有一个事件,我使用处理填充我的设计资产Application Module
的方法在我的内部创建。它适用于除路由不匹配的页面之外的所有页面onBootstrap
Zend\Mvc\Controller\AbstractController
这是我的设计事件的事件附件代码:
public function attach(EventManagerInterface $events,$priority=10) {
$events->getSharedManager()->attach('Zend\Mvc\Controller\AbstractController',
MvcEvent::EVENT_DISPATCH,[$this,'initiateAssets'],1000);
$events->getSharedManager()->attach('Zend\Mvc\Controller\AbstractController',
MvcEvent::EVENT_DISPATCH,[$this,'changeLayout'],30);
$events->getSharedManager()->attach('Zend\Mvc\Controller\AbstractController',
MvcEvent::EVENT_DISPATCH,[$this,'loadJsAssets'],30);
$events->getSharedManager()->attach('Zend\Mvc\Controller\AbstractController',
MvcEvent::EVENT_DISPATCH,[$this,'loadCssAssets'],30);
$events->getSharedManager()->attach('Zend\Mvc\Controller\AbstractController',
MvcEvent::EVENT_DISPATCH,[$this,'loadMetatagAssets'],30);
$events->getSharedManager()->attach('Zend\Mvc\Controller\AbstractController',
MvcEvent::EVENT_DISPATCH,[$this,'setupNavigation'],30);
}
Application Module Bootstrap Function
当路线不匹配时,这是我在 for 中的事件附件。
$eventManager->attach(
\Zend\Mvc\MvcEvent::EVENT_DISPATCH_ERROR,
function ($e) {
$application = $e->getApplication();
$serviceLocator = $application->getServiceManager();
$match = $application->getMvcEvent()->getRouteMatch();
if (null === $match) {
$uri = $e->getRequest()->getUri();
$params = [
'__NAMESPACE__' => 'Application\Controller',
'controller' => 'Application\Controller\IndexController',
'action' => 'not-found',
'locale' => 'en_US'
// Here you can add common params for your application routes
];
$routeMatch = new \Zend\Router\Http\RouteMatch($params);
$routeMatch->setMatchedRouteName('notFound');
$application->getMvcEvent()->setRouteMatch(
$routeMatch
);
}
}
我相当确定这个问题与我将设计事件附加到共享事件管理器有关,在针对单独控制器的调度事件错误期间必须覆盖该事件管理器,尽管我不太确定
我确实记得我的设计资产与特定的模块、控制器和操作相关联。我的数据库中有错误路线,因为application module, index controller, and not-found action
这可能是不正确的,并且设计事件只是无法识别映射的路线(基本上,正确的路线信息是什么?)
它似乎也产生了与一般错误相同的结果,因为它显示了错误/索引文件模板,但我的设计事件没有填充设计资产。
解决方案
您是否尝试附加 EVENT_DISPATCH_ERROR:
public function attach(EventManagerInterface $events,$priority=10) {
$events->getSharedManager()->attach('Zend\Mvc\Controller\AbstractController',
MvcEvent::EVENT_DISPATCH_ERROR,[$this,'initiateAssets'],1000);
$events->getSharedManager()->attach('Zend\Mvc\Controller\AbstractController',
MvcEvent::EVENT_DISPATCH_ERROR,[$this,'changeLayout'],30);
$events->getSharedManager()->attach('Zend\Mvc\Controller\AbstractController',
MvcEvent::EVENT_DISPATCH_ERROR,[$this,'loadJsAssets'],30);
$events->getSharedManager()->attach('Zend\Mvc\Controller\AbstractController',
MvcEvent::EVENT_DISPATCH_ERROR,[$this,'loadCssAssets'],30);
$events->getSharedManager()->attach('Zend\Mvc\Controller\AbstractController',
MvcEvent::EVENT_DISPATCH_ERROR,[$this,'loadMetatagAssets'],30);
$events->getSharedManager()->attach('Zend\Mvc\Controller\AbstractController',
MvcEvent::EVENT_DISPATCH_ERROR,[$this,'setupNavigation'],30);
}
推荐阅读
- c++ - 什么是查看函数是否公开的快速方法?
- google-cloud-datastore - 如何定期更新 Google Datastore 中的适量数据(约 250 万条条目)?
- python - 如何在位于 tk.Canvas 内的 tk.Frame 中添加两个小部件?
- php - 使用 REST API 发起对 Twilio 注册 SIP 的调用
- tensorflow - 无法使用 tensorflow-gpu 1.8.0 conda 包访问 GPU
- java - 在 Java Spring 中以 REST 方法返回后执行清理操作
- wordpress - 生成电子邮件优惠券 Wordpress
- c# - 如何在 SAP Crystal 报表中格式化阿拉伯日期名称 ar-AR 或 en-EN
- javascript - Animejs在滚动上动画文本
- transactions - 我可以将 JTA 与微服务一起使用吗?