Intereting Posts
Включение MySQL ON DUPLICATE KEY в таблицу аудита или журнала Результаты генерации PDF в ERR_INVALID_RESPONSE в Chrome file_get_contents – специальные символы в URL-адресе Как преобразовать все изображения в jpg? Предупреждение: mysqli_connect (): (HY000 / 1045): доступ запрещен для имени пользователя '@' localhost '(с использованием пароля: YES) В чем разница между методами init () и __construct () в Yii2 Преобразование целых чисел в шестнадцатеричные значения в PHP Сценарий для изменения всех таблиц и полей для сортировки utf-8-bin в MYSQL PHP – Как проверить, является ли год делением пополам (т.е. високосный год)? Php – тестирование, если выбран переключатель и получить значение PHP: включение страницы из глубоко вложенной иерархии каталогов – проблема с производительностью Как проверить, включен ли mod_rewrite в php? PHP встроен в сервер и переписывает мод .htaccess Проводящие параметры Axios не читаются $ _POST В раскрывающемся списке «Часовой пояс» укажите доступные часовые пояса в зависимости от страны?

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

Поэтому я знаю, что вы можете установить пользовательское действие по умолчанию в 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 .