0

首先,我想这样做,当用户导航到 test.com/username 时,它​​会将他带到 test.com/account/profile/name/username,所以我添加了这条路线

    $fc = Zend_Controller_Front::getInstance();
    $router = $fc->getRouter();
    $route = new Zend_Controller_Router_Route(
            ':name',
            array('controller' => 'account', 'action' => 'profile'));

    $router->addRoute('profile',$route);

它使它起作用了,但是现在当我使用以下链接时

<a href="<?php echo $this->url(array(
                'controller' =>'account',
                'action'=>'update'), 'default',true);?>">Settings</a>

我猜它会“混淆”并使用上述路线,因为它不会去 test.com/account/update..

我是否必须为更新操作添加另一条路线?这是否意味着我必须为与帐户控制器关联的所有操作添加新路由?

这里有什么帮助吗?:)

编辑:问题是链接重定向到 test.com/account/update,但它认为“帐户”是上面路由中定义的参数(如 test.com/name),而不是控制器因此它将其重定向到“配置文件”操作。

4

1 回答 1

0

url/my-name与默认路由匹配。自从:

  1. 路由器尝试按照指定的顺序匹配路由,并且
  2. 默认路由添加在您自己命名的“配置文件”路由之前

“默认”路线是使用的路线。

解决方案是从最具体到最一般定义您的路线。

因此,在您的情况下,我会尝试(在引导期间)删除默认路由,添加您命名的“配置文件”路由,然后添加回默认路由。

作为旁注:使用您定义的“配置文件”路由,如果您想拥有静态页面的网址,例如/contact/about等,这些将必须使用在您的“配置文件”路由之前定义的自定义路由,以便“ profile 的路由没有机会匹配它们并重定向。

更新

正如@TimFountain 在下面提醒我的那样,路线以reverse-order匹配,所以我上面的具体建议实际上并不正确。但显然顺序是问题所在。

于 2013-02-14T06:23:28.323 回答