更改Zend URL中的分隔字符

时间:2012-03-12 17:14:16

标签: php zend-framework frameworks pretty-urls

使用Zend Framework和视图的url方法:

$this->url(array('field1' => this, 'field2' => 'is', 'field3' => 'my example'), 'route_name');

其中route_name是url路由的名称,并且从数据库中检索每个字段#。

我注意到默认情况下它会将Controller / Action名称中的空格更改为加号,以便显示如下:

www.example.com/this is my example

www.example.com/this+is+my+example

我想将分隔符从+更改为 - 以具有类似

的内容
www.example.com/this-is-my-example

我知道另一个帖子:How to change the separation character of Zend Url? 记录了一种方法来做到这一点,我试过没有成功。

非常感谢对如何做到这一点的详尽解释。

EDIT2:我知道问题所在,如果有人感兴趣,它来自url汇编的方式,它使用urlencode转换所有非字母数字字符期望 - 和_和空格为+,没有办法覆盖,而不是替换字符手动创建URL(如Maxime建议)或创建自定义url函数替换字符(由aporat建议)...

谢谢!

2 个答案:

答案 0 :(得分:1)

不幸的是,在调用url(...)函数以实现您想要的功能之前,您无法设置任何内容。原因是当汇编URL时,它使用php urlencode(...)函数。

那就是说,你还有很多选择:

1)您只是不使用url(...)功能并手动创建URL。 (最佳选择)

2)您创建了一个新的帮助器,其作用类似于url(...),但为该功能添加了额外的更改,以实现您的目标。

3)您获取url(...)函数的输出并执行str_replace+更改-。 (我不推荐这个选项)

就个人而言,我手动创建所有网址以避免此类问题。

答案 1 :(得分:1)

如果您真的想这样做,可以扩展库存Zend_View_Helper_Url视图助手,并将您的网址逻辑添加到视图助手中。

<?php
namespace Application\View\Helper;

 class MyUrl extends \Zend_View_Helper_Url
 {
    /**
     * Generates an url given the name of a route.
     *
     * @access public
     *
     * @param  array $urlOptions Options passed to the assemble method of the Route object.
     * @param  mixed $name The name of a Route to use. If null it will use the current Route
     * @param  bool $reset Whether or not to reset the route defaults with those provided
     * @return string Url for the link href attribute.
     */
     public function myUrl(array $urlOptions = array(), $name = null, $reset = false, $encode = true)
     {

     return str_replace('+', '-', parent::url($urlOptions, $name, $reset, $encode));
     }
}

然后只需加载新的视图帮助器就可以了:

        $helper = new \Application\View\Helper\MyUrl;
        $this->view->registerHelper($helper, 'myUrl');