调度错误事件未连接到AbstractController上的共享事件



我的错误页面没有按计划工作。我在Application Module中使用onBootstrap方法创建了一个事件,该方法用于处理填充我的设计资产它适用于除路由不匹配的页面之外的所有页面我认为这是因为当发生调度错误事件时,它会执行我的所有事件,除了共享事件管理器针对ZendMvcControllerAbstractController附加的事件

以下是我的设计事件的事件附件代码:

public function attach(EventManagerInterface $events,$priority=10) {
$events->getSharedManager()->attach('ZendMvcControllerAbstractController',
MvcEvent::EVENT_DISPATCH,[$this,'initiateAssets'],1000);
$events->getSharedManager()->attach('ZendMvcControllerAbstractController',
MvcEvent::EVENT_DISPATCH,[$this,'changeLayout'],30);
$events->getSharedManager()->attach('ZendMvcControllerAbstractController',
MvcEvent::EVENT_DISPATCH,[$this,'loadJsAssets'],30);
$events->getSharedManager()->attach('ZendMvcControllerAbstractController',
MvcEvent::EVENT_DISPATCH,[$this,'loadCssAssets'],30);
$events->getSharedManager()->attach('ZendMvcControllerAbstractController',
MvcEvent::EVENT_DISPATCH,[$this,'loadMetatagAssets'],30);
$events->getSharedManager()->attach('ZendMvcControllerAbstractController',
MvcEvent::EVENT_DISPATCH,[$this,'setupNavigation'],30);
}

这是我在Application Module Bootstrap Function中的事件附件,用于路由不匹配时。

$eventManager->attach(
ZendMvcMvcEvent::EVENT_DISPATCH_ERROR,
function ($e) {
$application    = $e->getApplication();
$serviceLocator = $application->getServiceManager();
$match          = $application->getMvcEvent()->getRouteMatch();
if (null === $match) {
$uri = $e->getRequest()->getUri();
$params     = [
'__NAMESPACE__' => 'ApplicationController',
'controller'    => 'ApplicationControllerIndexController',
'action'        => 'not-found',
'locale'        => 'en_US'
// Here you can add common params for your application routes
];
$routeMatch = new ZendRouterHttpRouteMatch($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('ZendMvcControllerAbstractController',
MvcEvent::EVENT_DISPATCH_ERROR,[$this,'initiateAssets'],1000);
$events->getSharedManager()->attach('ZendMvcControllerAbstractController',
MvcEvent::EVENT_DISPATCH_ERROR,[$this,'changeLayout'],30);
$events->getSharedManager()->attach('ZendMvcControllerAbstractController',
MvcEvent::EVENT_DISPATCH_ERROR,[$this,'loadJsAssets'],30);
$events->getSharedManager()->attach('ZendMvcControllerAbstractController',
MvcEvent::EVENT_DISPATCH_ERROR,[$this,'loadCssAssets'],30);
$events->getSharedManager()->attach('ZendMvcControllerAbstractController',
MvcEvent::EVENT_DISPATCH_ERROR,[$this,'loadMetatagAssets'],30);
$events->getSharedManager()->attach('ZendMvcControllerAbstractController',
MvcEvent::EVENT_DISPATCH_ERROR,[$this,'setupNavigation'],30);
}

最新更新