【问题标题】:Dispatch Error Event Not Connecting to Shared Event on AbstractController调度错误事件未连接到 AbstractController 上的共享事件
【发布时间】: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


    【解决方案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);
      }
    

    【讨论】:

      猜你喜欢
      • 2019-07-22
      • 2021-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-14
      • 2021-12-01
      • 1970-01-01
      相关资源
      最近更新 更多