【发布时间】:2019-01-04 04:24:40
【问题描述】:
我的错误页面没有按计划工作。我在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 中的事件附件,用于当路由不匹配时。
$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 的错误路线,这可能是不正确的,并且设计事件只是无法识别映射的路线(基本上正确的路线信息是什么?)
它似乎也产生了与一般错误相同的结果,因为它显示了错误/索引文件模板,但我的设计事件没有填充设计资产。
【问题讨论】:
标签: events zend-framework zend-framework3