Простые переписывает в Zend Framework - PullRequest
3 голосов
/ 23 января 2012

Это кажется очень простым вопросом, но я нашел только сложные ответы. У меня есть приложение 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, которая хороша, но часто я спрашиваю себя: «Куда должен идти этот код: в контроллере, модели, начальной загрузке, прочем?»)

Ответы [ 2 ]

10 голосов
/ 23 января 2012

для определенной цели, например, у вас есть "named" route, будет самым простым способом сделать это.Несмотря на то, что существует множество способов реализации именованного маршрута, проще всего поместить его в 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 () важно помнить, использовать ли именованныйroute:

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

или если вам нужно передать обычный 'controller' =>, 'action' =>:

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

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

3 голосов
/ 23 января 2012

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

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

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',
            )
    ));
}

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

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


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

в view.phtml

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...