使用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建议)...
谢谢!
答案 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');