Все загрузчики модулей всегда выполняются по одному запросу

#php #zend-framework #module #bootstrapping

#php #zend-framework #модуль #начальная загрузка

Вопрос:

У меня есть два модуля: admin, default. У каждого есть один загрузчик:

 class Admin_Bootstrap extends Zend_Application_Module_Bootstrap
{
     function _initSmth()
     {
          echo 'admin';
          die();
     }
}
  

и по умолчанию:

  class Default_Bootstrap extends Zend_Application_Module_Bootstrap
    {
         function _initSmth()
         {
              echo 'default';
              die();
         }
    }
  

Если я запускаю site.ru или site.ru/admin / он всегда возвращает ‘admin’.
Почему по умолчанию загрузчик запускается с загрузкой администратора?

Комментарии:

1. Вы проверили, что site.ru на самом деле не используется модуль admin? Проверьте объект запроса и посмотрите, какой модуль / контроллер / действие он использует для начала.

2. Да, я сделал. Контроллер индекса по умолчанию возвращает ‘default’ для $this-> GetRequest()->getModuleName(). И контроллер индекса администратора возвращает ‘admin’.

Ответ №1:

Да, именно так работает Zend. Если вы включите ресурс модуля в конфигурацию вашего приложения (типично application.ini)

 resource.modules=
  

Все модули загружаются во время начальной загрузки. Если вы хотите изменить поведение в зависимости от того, к какому модулю был направлен запрос, вы можете спланировать это с помощью плагина controllers.

Учтите, что первый хук, который знает, какой модуль / контроллер / действие, является routeShutdown, но в зависимости от того, что вам нужно сделать, вы можете использовать другие хуки.

Вот пример

 Plugin_Test extends Zend_Controller_Plugin_Abstract {

public function routeShutdown (Zend_Controller_Request_Abstract $request){

    switch($request->getModuleName()) {

        case 'default':
        // do something
        break;
        case 'admin':
        // do something else
    }

}