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

jku*_*ner 9 events zend-framework zend-framework3

我的错误页面未按计划运行.我有一个事件,我在我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);
  }
Run Code Online (Sandbox Code Playgroud)

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
                  );
              }
          }
Run Code Online (Sandbox Code Playgroud)

我相当肯定这个问题与我将设计事件附加到共享事件管理器有关,在针对单独控制器的调度事件错误期间必须覆盖它,尽管我不太确定

我确实记得我的设计资产链接到特定的模块,控制器和操作.我在我的数据库中的错误路线的application module, index controller, and not-found action,也许这是不正确的,设计时是不承认的映射路径(基本上是什么这样做的正确的路由信息?)

它似乎也产生了与一般错误相同的结果,因为它显示了错误/索引文件模板,但我的设计事件没有填充设计资产.

ebe*_*air -1

您是否尝试附加 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);
  }
Run Code Online (Sandbox Code Playgroud)