1

使用 Zend 框架和视图的 url 方法:

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

其中 route_name 是 url 路由的名称,每个 field# 都是从数据库中检索的。

我注意到默认情况下,它将控制器/操作名称中的空格更改为加号,如下所示:

www.example.com/this is my example

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

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

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

我知道另一个线程:如何更改 Zend Url 的分隔符? 正如记录的那样,我尝试过但没有成功的方法。

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

EDIT2:如果有人感兴趣,我知道问题出在哪里,它来自 url 的组合方式,它使用 urlencode 转换所有非字母数字字符,期望 - 和 _ 和空格作为 +,没有办法覆盖它比替换字符手动创建 url(如 Maxime 建议的那样)或创建替换字符的自定义 url 函数(如 aporat 建议的那样)......

谢谢!

4

2 回答 2

1

如果你真的想这样做,你可以扩展 stock Zend_View_Helper_Urlview helper 并将你的 url 逻辑添加到你的 view helper 中。

<?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');
于 2012-03-12T20:45:33.677 回答
1

url(...)不幸的是,在调用该函数以实现您想要做的事情之前,您无法设置任何内容。原因是在组装 URL 时,它使用了 phpurlencode(...)函数。

也就是说,您仍然有很多选择:

1)您根本不使用该url(...)功能并手动创建您的网址。(最佳选择)

2)您创建了一个新的助手,它的行为类似于url(...)但向函数添加了额外的更改以实现您想要做的事情。

3)您获取 url(...) 函数的输出str_replace+使用-. (我不推荐该选项)

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

于 2012-03-12T18:51:36.137 回答