Zend路线搞砸了

时间:2013-02-13 18:49:29

标签: zend-framework redirect router

首先,我想这样做,当用户导航到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中),并且不是控制器,所以它将其重定向到'配置文件'动作。

1 个答案:

答案 0 :(得分:0)

网址/my-name与默认路由匹配。时间:

  1. 路由器尝试按照指定的顺序匹配路由,
  2. 在您自己命名的“个人资料”路线之前添加默认路线
  3. '默认'路线是被使用的路线。

    解决方案是将您的路线定义从最具体到最常规。

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

    作为旁注:使用您定义的“个人资料”路线,如果您想拥有静态网页的网址,例如/contact/about等,则必须使用自定义在您的“个人资料”路线之前定义的路线,以便“个人资料”路线无法与他们匹配并重定向。

    <强>更新

    由于@TimFountain在下面提醒我,路线在逆序中匹配,所以我上面的具体建议实际上并不正确。但显然秩序是问题。