【问题标题】:Zend router behaviourZend 路由器行为
【发布时间】:2011-12-23 22:30:21
【问题描述】:

我的路由器有点问题。

我有一条自定义路线:

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

但是当我尝试访问这个网址时: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 执行此操作?

【问题讨论】:

  • 我想不出更好的办法!

标签: zend-framework routes zend-router


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多