Zend URLでの区切り文字の変更
-
12-12-2019 - |
質問
VIEWのZendフレームワークとURLメソッドを使用する:
$this->url(array('field1' => this, 'field2' => 'is', 'field3' => 'my example'), 'route_name');
.
ここで、route_nameはURLルートの名前であり、各フィールド#はデータベースから取得されます。
デフォルトでは、コントローラ/アクション名のスペースをプラスサインに変更して、次のように表示されていることに気付きました。
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関数を作成する(Aporatによって提案されているように)...
ありがとう!
解決
本当にそれをしたいのなら、株式Zend_View_Helper_Url
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');
. 他のヒント
残念ながら、あなたがやりたいことを達成するためにurl(...)
関数を呼び出す前に何も設定することはできません。その理由は、URLが組み立てられている場合、PHP urlencode(...)
関数を使用しています。
それは言った、あなたはまだ多くのオプションを持っています:
1)url(...)
関数を使用して手動であなたのURLを作成するだけです。(最良のオプション)
2)url(...)
のような機能する新しいヘルパーを作成しますが、あなたがやりたいことを達成するために関数に余分な変更を加えます。
3)URL(...)関数の出力を取り、str_replace
を+
に変更します。(私はそのオプションをお勧めしません)
個人的には、この種の問題を回避するために手動ですべてのURLを作成します。