Простые перезаписи в Zend Framework

Это кажется очень простым вопросом, но я нашел только сложные ответы. У меня есть приложение Zend Framework, которое требует от пользователей входа в систему. Функции loginAction() и logoutAction() определены в AuthController . Я хочу разрешить пользователям регистрироваться через http://www.example.com/login, а не http://www.example.com/auth/login .

Я знаю, что есть множество способов сделать это, 3, которые я рассмотрел:

  1. .htaccess переписать
  2. Создание LoginController и перенаправление indexAction () на auth / login
  3. Определение собственных маршрутов с помощью Zend_Controller_Router_Rewrite.

Я бы предпочел сохранить его из №1, если это возможно. # 2 достаточно легко понять, хотя кажется, что это взломать. Он также может загромождать код с помощью 5-строчных классов «Контроллер». Я думаю, что №3 – это путь, но я не совсем понимаю, как эффективно использовать его. Я попытался использовать Zend_Config с RewriteRouter, хотя я только определил логин для входа, поэтому каждая ссылка стала «/ login» (я думаю, что мне не хватало маршрут по умолчанию). Я сделал это в своем Bootstrap.php, я не уверен, что это было правильно.

Есть ли простой подход, который мне не хватает? Я неправильно использую # 3? Есть ли учебники для этого, которые я должен прочитать? (Я смотрел документацию Zend, которая хороша, но часто я спрашиваю: «Куда должен идти этот код: в контроллере, модели, бутстрапе, другом?»)

для определенной цели, как у вас есть «названный» маршрут, это самый простой способ сделать это. Хотя существует несколько способов реализации именованного маршрута, проще всего поместить его в application.ini:

  // /application/configs/application.ini resources.router.routes.login.route = /login resources.router.routes.login.defaults.module = default resources.router.routes.login.defaults.controller = auth resources.router.routes.login.defaults.action = login 

это не так, но это не похоже на меня.
Также делать это таким образом (без каких-либо гарантий) предотвратить любые проблемы с маршрутами по умолчанию.

При вызове маршрута с помощью помощника url () важно не забывать использовать либо именованный маршрут:

 <?php echo $this->url(array(), 'routeName') ?> 

или если вам нужно передать нормальный «контроллер» =>, «действие» =>:

 <?php echo $this->url(array('controller' => 'index', 'action' => 'index'), 'default') ?> 

рядом с тем, что я могу сказать «default» в этом контексте, указывает, что это будет маршрут по умолчанию, определенный в Zend / Controller / Router / Route / Module.php

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

Если у вас есть только один маршрут для перезаписи, просто добавьте функцию:

 protected function _initRoute() { $router = Zend_Controller_Front::getInstance()->getRouter(); $router->addRoute('login', //key of route ! new Zend_Controller_Router_Route( 'login', //this is url(www.url.com/login) that you want to rewrite, you can set whatever you want array( 'module' => 'default', 'controller' => 'auth', 'action' => 'login', ) )); } 

Теперь каждый запрос http://www.your-url.com/ будет указывать на http://www.your-url.com/default/auth/login (модуль / контроллер / действие)

Редактировать:


Если вы хотите использовать свой новый url в файле вида, вам нужно использовать ключ для этого маршрута

in view.phtml

  <a href="<?php echo $this->url(array(), 'login'); ?>"> [link] </a> 

Первым параметром является array (), а второй – ключ, который вы определяете в bootstrap. Затем, если вы измените URL-адрес на / new-login в бутстрапе, все URL-адреса будут изменены в файлах просмотра.