【问题标题】:How to specify a dynamic default for a key in a router, Zend Framework如何为路由器中的键指定动态默认值,Zend 框架
【发布时间】:2009-05-27 16:01:35
【问题描述】:

这个问题链接到this one

如何将类别部分的默认设置为请求url中的类别值?

$Router=$this->_front->getRouter();
$CategoryRoute = new Zend_Controller_Router_Route('category/:category/:controller/:action/*',
           array(
                 'controller' => 'index',
                 'action'     => 'index',
                 'category'   => 'aaa'
           ));
$Router->addRoute('category', $CategoryRoute);

换句话说,在我构建这条路线时,我需要将值 [aaa] 作为类别的值。 [category] ​​总是有一个值,否则它将使用默认路由。

我的意思的例子:
如果我使用 url http://baseurl/category/mycat/index 浏览网站
我将被路由到 controller=index、action=index、category=mycat。
但是,在我使用 Zend_View::url() 帮助器的所有视图文件中,链接将指向:
http://baseurl/category/aaa/somthing/somthing(使用上面的确切路径)
虽然我实际上需要它们指向:
http://baseurl/category/mycat/somthing/somthing

发生这种情况是因为 category 的默认值是作为常量写入路由中的,而不是以某种方式从当前 URL 中获取的。
我目前通过自己从 URL 中提取类别并将其设为默认值来解决此问题。

【问题讨论】:

  • 你能用一些网址澄清一下哪些有效,哪些无效?

标签: php zend-framework routing


【解决方案1】:

您的帖子中有问题吗? :)

如果我没听错 - 你设置你的默认类别,如果你打电话,它将被使用

$this->url(array(),'category');

但是当你使用

$this->url(array('category'=>'my-category'),'category');

它将返回 category/my-category/index/idnex 而不是 category/aaa/index/index

【讨论】:

  • 不,我会一直使用 url(array(),null,true);使用的路由器将由 URI 决定。这工作正常。问题是, url() 助手不会从 URL 中获取类别的值,而是希望我在助手中手动输入它 url(array('category'=>'somevalue'));这是我试图避免的。我可以通过在构建新路由时为 [category] ​​输入默认值来避免这种情况。问题是,它是一个静态值,它必须是 URL 中的值。我通过提取 [category] ​​的值并将其设为默认值来临时解决此问题。
  • 这不应该发生。 url() 的最后一个参数切换“路由重置” - 如果它很快或被省略,那么应该从当前 URL 填充路由。尝试转储使用的路线。 (类似 $frontContr->getRouter()->...)
【解决方案2】:

如果你使用

$this->url(array(), 'category'); 

它应该可以工作。

但请记住:只要您坚持使用默认值,您将始终获得一个简单的 /category 链接,但是当使用不同的参数时,它应该根据当前 URI 返回正确调整的 URL。

即。如果 URI 是 /category/aaa/index/index 那么 $this->url(array(), 'category');将返回 /category,如果 URI 是 /category/xxx/index/index 则 $this->url(array(), 'category');将返回 /category/xxx,如果 URI 是 /category/xxx/index/process 那么 $this->url(array(), 'category');将返回 /category/xxx/index/process 等。

【讨论】:

    猜你喜欢
    • 2010-11-28
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多