#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
}
}