Использование Zend_Controller_Router_Route для создания удобных URL-адресов для действий в IndexController - PullRequest
1 голос
/ 09 марта 2010

В моем IndexController у меня в настоящее время есть indexAction (домашняя страница), loginAction и logoutAction. Я пытаюсь удалить "/ index /" из URL, чтобы получить domain.com/login вместо domain.com/index/login.

Какой самый чистый способ достичь этого? Есть ли RegEx, который мы можем использовать? Я никогда не хочу / index / в URL.

Мое текущее решение, которое, я считаю, можно улучшить, приведено ниже. Кроме того, что делает первый параметр в addRoute ()?

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
  protected function _initViewHelpers()
  {
    $front  = Zend_Controller_Front::getInstance();
    $router = $front->getRouter();
    $router->addRoute('login',
      new Zend_Controller_Router_Route('login/*', array(
        'controller' => 'index',
        'action'     => 'login'
      ))
    );
    $router->addRoute('logout',
      new Zend_Controller_Router_Route('logout/*', array(
        'controller' => 'index',
        'action'     => 'logout'
      ))
    );
  }
}

1 Ответ

2 голосов
/ 09 марта 2010

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

Первый параметр - это имя маршрута, которое вы должны использовать с помощником url () в своих представлениях:

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

Обновление. Вы можете использовать такой маршрут, если вам нужен только один маршрут без «индекса» в URL:

$router->addRoute('default',
  new Zend_Controller_Router_Route(':action/*', array(
    'controller' => 'index',
  ))
);
...