1

Zend Frameworkとビューの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を作成するか(Maximeが提案するように)、または文字を置き換えるカスタムURL関数を作成する(aporatが提案するように)...

ありがとう!

4

2 に答える 2

1

本当にそれを実行したい場合は、ストックZend_View_Helper_Urlビューヘルパーを拡張し、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');
于 2012-03-12T20:45:33.677 に答える
1

残念ながら、url(...)関数を呼び出してやりたいことを実行する前に、何も設定することはできません。その理由は、URLがアセンブルされるときに、phpurlencode(...)関数を使用するためです。

そうは言っても、まだ多くのオプションがあります。

1)関数を使用せず、url(...)手動でURLを作成します。(最良のオプション)

2)のように機能する新しいヘルパーを作成しますurl(...)が、関数に追加の変更を追加して、実行したいことを実現します。

3)url(...)関数の出力を取得し、を使用str_replaceして変更+-ます。(私はそのオプションをお勧めしません)

個人的には、この種の問題を回避するために、すべてのURLを手動で作成しています。

于 2012-03-12T18:51:36.137 に答える