Как отправить переменные в макет ошибки в ZF3? - PullRequest
2 голосов
/ 19 апреля 2019

Как правильно отправить переменные в шаблон макета, чтобы он был доступен на страницах ошибок?

У меня AppFrontController выше всех моих контроллеров внешнего интерфейса.У него есть код (код рядом) в методе onDispatch ():

 $assocArrayOfVars = $this->MyPlugin()->getDbVariablesArray();
  foreach($assocArrayOfVars as $name => $value){
     $this->layout()->$name = $value;
  }

  list($catalog, $count_goods) = $this->MyPlugin()->getStandardCatalogDataForLayout();
  $this->layout()->catalog = $catalog;
  $this->layout()->count_goods = $count_goods;

В результате у меня есть локальные переменные на каждой странице веб-интерфейса.Но я не сделал этого на странице ошибок.Как я могу решить эту проблему?Мне очень нужны ваши советы!Спасибо!

1 Ответ

0 голосов

Спасибо за ваши советы! Проблема решена. Код финальной версии файла Module.php ниже. Я использую слушатель вместо «родительского контроллера» по совету froschdesign.

 public function onBootstrap(MvcEvent $event)
   {
      $application = $event->getApplication();
      $eventManager = $application->getEventManager();
      $eventManager->attach('dispatch', array($this, 'loadConfiguration'), 2);
      $eventManager->attach('dispatch.error', array($this, 'loadConfiguration'), 2);
}


 public function loadConfiguration(MvcEvent $e)
   {
      $application = $e->getApplication();
      $sm = $application->getServiceManager();
      $sharedManager = $application->getEventManager()->getSharedManager();

      $router = $sm->get('router');
      $request = $sm->get('request');

      $zendCart = $sm->get('ControllerPluginManager')->get('ZendCart');
      $myPlugin = $sm->get('ControllerPluginManager')->get('MyPlugin');
      $viewModel = $e->getViewModel();

      $viewModel->setVariable('total', $zendCart->total());
      $viewModel->setVariable('total_items', $zendCart->total_items());

      $viewModel->setVariable('rusmonth', $rusmonth);

      /* Layout variables */
      $assocArrayOfVars = $myPlugin->getDbVariablesArray();
      foreach ($assocArrayOfVars as $name => $value) {
         $viewModel->setVariable($name, $value);
      }

      list($catalog, $count_goods) = $myPlugin->getStandardCatalogDataForLayout();
      $viewModel->setVariable('catalog', $catalog);
      $viewModel->setVariable('count_goods', $count_goods);

   }

Больше примеров слушателей здесь .

...