1

我的路由器有点问题。

我有一个自定义路线:

$router->addRoute('showTopic',
                      new Zend_Controller_Router_Route('/forum/topic/:topic',
                                        array('module' => 'forum',
                                              'controller' => 'topic',
                                              'action' => 'show'),
                                        array('topic' => '\d+'))); 

但是当我尝试访问这个 url 时:localhost/forum/topic/16 我得到这个错误:

致命错误:未捕获的异常“Zend_Controller_Router_Exception”,消息“未指定主题”

但我不想为主题设置默认值,因为我还希望路由 /forum/topic 列出所有主题......

其次,我知道如果我添加自定义路由,默认路由会被覆盖,但我也需要一些默认路由。我发现的唯一方法是在 url view helper 的第二个参数中设置'default',就像这样

$this->url(array(
                 'module' => 'forum',
                 'controller' => 'topic',
                 'action' => 'add'
                ), 'default', true)

有没有更优雅的方法,而不是对我想使用默认行为的所有 url 执行此操作?

4

1 回答 1

1

您应该有一个主题的默认值,并在更具体的路径之后添加更通用的路径(用于论坛/主题的路径)。Route_Rewrite 检查从最后一个开始的路由(它实际上是一个 array_inverse)。

url 助手将程序集 url 委托给路由,它的第二个参数是要从路由器中提取的路由的名称。由于默认路由是在“默认”名称下注册的,因此使用该名称并没有什么不好的地方(它不是魔术字符串或特殊情况)。如果这真的让您感到困扰,您可以编写一个自定义助手(放置在“视图/助手”下):

class Zend_View_Helper_DefaultUrl extends Zend_View_Helper_Abstract {
   public function defaultUrl($params) {
      return $this->view->url($params, 'default');
   }
}

并在您的视图中使用它,例如 defaultUrl(array('action'=>'test')) ?>。

于 2011-12-25T15:13:54.673 回答