2013-02-13 88 views
0

首先,我想这样做,当用户导航到test.com/username这将他带到test.com/account/profile/name/username,所以我添加了这条路线Zend路线越来越混乱

$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> 

我猜它被“混乱”,并使用上述路线,因为它没有去测试。 com/account/update ..

我是否必须为更新操作添加其他路由?这不是说我必须为与帐户控制器相关的所有操作添加新路线吗?

这里有什么帮助吗? :)

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

+1

从你的问题来看,问题不是很清楚。 URL助手是输出错误的lin,还是输出的链接被错误的路由匹配?或者你只是不确定如何将动作传递给你的个人资料路线? – 2013-02-13 19:41:24

+0

对不起,我更新了这篇文章,希望现在有点清楚.. – Systemfreak 2013-02-13 19:46:28

+0

因此,您的个人资料路线中是否有/ account/update的请求?因为我没有看到具有两个参数的路线可以如何与具有一个参数的路线相匹配。这些路线是否明确定义为您的问题? – 2013-02-14 09:13:17

回答

0

url /my-name与默认路由匹配。因为:

  1. 路由器尝试在他们指定的顺序匹配路线,
  2. 默认路由之前,你自己命名为“曲线”途径

“默认”路由添加是被使用的那个。

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

因此,就你的情况而言,我会尝试(在引导过程中)删除默认路由,添加名为'profile'的路由,然后添加回默认路由。

作为一个侧面说明:随着你定义它,如果你想拥有像静态页面的URL /contact,​​,等等,这些都会前使用定义定制路由的“个人资料”路线的“配置文件'路线,以便'配置文件'路线没有机会与他们匹配并重定向。

更新

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

+1

实际上路线是按相反的顺序匹配的,所以你最高优先级的路线应该最后定义 – 2013-02-14 09:09:19

+0

顺序很重要,我并不真的知道。感谢大卫和蒂姆,其实是的,他们是相反的顺序匹配,所以,因为我改变了一点,一切正常。 – Systemfreak 2013-02-14 10:21:55

+0

Yikes!我无法相信我弄错了那一个。感谢您的更正,@TimFountain。删除我的答案,因为它是错的。 – 2013-02-14 15:58:52