2

Я хочу загрузить дополнительный файл конфигурации на основе имени контроллера в моем загрузочном файле, поэтому мне нужно получить имя контроллера в bootstrap (в Zend Framework 1.1). Это возможно?Получить имя контроллера в Bootstrap

Я пробовал:

$front = Zend_Controller_Front::getInstance(); 
$controller = $front->getRequest()->getControllerName(); 

Но это не работает:

Fatal error: Call to a member function getControllerName() on a non-object in [path]\application\Bootstrap.php on line 10 

ответ

4

Сначала вы должны сначала запустить переднюю панель контроллера, чтобы использовать ее.

$bootstrap->bootstrap('frontController'); 
$front = $bootstrap->frontController; 
$controller = $front->getRequest()->getControllerName(); 
4

Вы должны инициализировать объект запроса первым развернув фронт-контроллер

Пример для использования в классе Bootstrap:

$this->bootstrap('frontController'); 
$request = $this->getResource('frontController')->getRequest(); 
$controller = $request->getControllerName(); 

Нельзя использовать объект запроса в файле начальной загрузки.

Лучшим решением было бы использовать плагин переднего контроллера и его методы pre-/postDispatch() для достижения этого.

Если у вас более сложная логика, или вам нужны дополнительные методы удобства для каждого контроллера, вы можете расширить класс Zend_Controller_Action.

+2

+1. Плагин контроллера был бы таким, каким я мог бы пойти. –

+0

Я добавил решение Songos и написал его немного более понятно. –

+0

Извините, но первоначальный ответ заключался в том, чтобы самостоятельно разобрать URL-адрес, поэтому я не могу его продвинуть, особенно когда полностью изменяю весь ответ. Не могу поверить, что люди поддержали это больше, чем принятый ответ. –

3

Вы можете сделать это так же:

 $router = new Zend_Controller_Router_Rewrite(); 
     $request = new Zend_Controller_Request_Http(); 
     $router->route($request); 
     $request->getActionName(); 
Смежные вопросы