使用Zend_Controller_Router_Route为IndexController中的操作创建友好URL

时间:2010-03-09 17:11:38

标签: zend-framework bootstrapping zend-controller-router

在我的IndexController中,我目前有indexAction(主页),loginAction和logoutAction。我正在尝试从网址中删除“/ index /”以获取domain.com/login而不是domain.com/index/login。

实现这一目标的最简洁方法是什么?我们可以使用RegEx吗?我不希望在URL中使用/ index /。

我认为可以改进的当前解决方案如下。另外,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 个答案:

答案 0 :(得分:2)

没有什么可以推动的,你必须为每个动作创建路线。这将允许您在不修改代码的情况下更改路由默认值(模块/控制器/操作)。

第一个参数是路径名称,您必须在视图中使用url()帮助程序:

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

更新。如果您只想在url中使用一条没有“index”的路由,则可以使用此类路由:

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