Поэтому я знаю, что вы можете установить пользовательское действие по умолчанию в Zend Framework в application.ini
:
resources.frontController.defaultAction = "something"
Но что, если я хочу, чтобы это действие по умолчанию зависело от контроллера? Таким образом, действие контроллера A
умолчанию будет B
, по умолчанию для контроллера C
будет D
и т. Д. Как настроить контроллеры для выполнения этих параметров действия по умолчанию? Какой фрагмент кода нужен и где его разместить?
Вы можете добавить в свой Bootstrap.php что-то вроде этого:
protected function _initRoutes() { $Router = Zend_Controller_Front::getInstance()->getRouter(); $Route = new Zend_Controller_Router_Route( '/controller1', array( 'action' => 'customaction1' ) ); $Router->addRoute('c1', $Route); $Route = new Zend_Controller_Router_Route( '/controller2', array( 'action' => 'customaction2' ) ); $Router->addRoute('c2', $Route); [...] }
Альтернативный подход к обработке множества маршрутов может заключаться в том, чтобы контроллер решил, что он хочет сделать:
public function indexAction() { $this->_forward('mydefault'); } public function mydefaultAction() { $this->view->message = 'I get called on /controller/index'; }
Мой GUESS: этот подход быстрее, чем добавление десятков пользовательских маршрутов. Но это просто догадка, ничто не проверено здесь.
По умолчанию вы можете только сказать, что такое действие по умолчанию для контроллера. Если вы хотите отправить определенный контроллер и действие под определенным URI, вы можете сделать это, используя маршруты .
Существует маршрут по умолчанию, который вы, вероятно, используете в своем приложении прямо сейчас. Вы можете добавить дополнительные маршруты из приложения.ini или создать плагин frontController для ввода маршрутов в маршрутизатор. Первое намного проще, последнее дает вам больше возможностей, например, для загрузки маршрутов на основе записей в базе данных.
Маршруты в application.ini хорошо объясняются в руководстве ZF. Это сводится к этим четырем линиям по маршруту:
resources.router.routes.route_id.route = "/login" resources.router.routes.route_id.defaults.module = "user" resources.router.routes.route_id.defaults.controller = "login" resources.router.routes.route_id.defaults.action = "index"
Здесь можно указать действие по defaults.action
по defaults.action
. Для параметров в маршрутах раздел о типе Zend_Controller_Router_Route объясняет это довольно хорошо.
Другой вариант – плагин frontController. Этот класс может подключаться к различным частям процесса, и эта система очень эффективна при правильном использовании. Вероятно, это не обязательно для вашего вопроса, но вы можете посмотреть руководство, где есть страница о плагинах и раздел, как загрузить эти плагины в application.ini .