4

次のような URL を作成します。

$app->createAbsoluteUrl('/', array(
     'param1' => 'val1',
     'param2' => 'var2',
);

生成される URL は次のとおりです。

http://mysite.com/param1/var1/param2/var2

しかし、私は次のようなURLを期待しています:

http://mysite.com/?param1=var1&param2=var2

機能マニュアルには次のように書かれています:

$params 配列の追加の GET パラメータ (name=>value)。名前と値の両方が URL エンコードされます。

しかし、それはそのようには機能しないようです。期待される URL を生成するにはどうすればよいですか? ありがとう。

4

3 に答える 3

3

urlManagerアプリケーションコンポーネントが生成するURLに「get」形式を使用するように指定する必要があります。デフォルトでは、「パス」形式を使用します。Yiiガイドでは、アプリケーション構成内でそれを行う方法について説明しています。

array(
    ......
    'components'=>array(
        ......
        'urlManager'=>array(
            'urlFormat'=>'get',
        ),
    ),
);

更新:あなたurlFormatは「パス」であり、それは設計によるものです...代替案はどうですか?

CWebApplication代わりに独自の派生クラスを拡張して使用してもかまわない場合は、次のようないくつかのオプションがあります。

  1. createUrlExオリジナルに基づいて独自のメソッドを定義しますcreateUrl。次のようになります。

    public function createUrlEx($format,$route,$params=array(),$ampersand='&')
    {
        $oldFormat = $this->getUrlManager()->getUrlFormat();
        $this->getUrlManager()->setUrlFormat($format);
        $url = $this->getUrlManager()->createUrl($route,$params,$ampersand);
        $this->getUrlManager()->setUrlFormat($oldFormat);
        return $url;
    }
    
  2. registerCoreComponents2番目のURLマネージャーを使用できるようにオーバーライドします。

    protected function registerCoreComponents()
    {
        parent::registerCoreComponents();
    
        $components=array(
            'specialUrlManager'=>array(
                'class'=>'CUrlManager',
                'urlFormat'=>'get',
            ),
        );
    
        $this->setComponents($components);
    }
    

    Yii::app()->specialUrlManager->createUrl(...)これで、いつでも電話をかけることができます。

他の方法で問題に取り組むこともできます。

  1. CUrlManagerその場で作成するURLのフレーバーを選択できるメソッドを拡張して公開します。

  2. 1つまたは2つの場所で「get」URLのみが必要な場合は、いつでも新しいCUrlManagerオブジェクトを作成し、その場で構成し、呼び出しcreateUrlてから破棄することができます。この醜さを無料の関数の背後に隠すこともできます。基本的に、この(確かに推奨されない)アプローチは、拡張する必要がないという利点があるため、最初の回避策のローテクバージョンですCWebApplication

于 2012-04-25T15:34:13.973 に答える
3

次のようなものを使用できるはずです。これにより、カスタムをYii::app()->urlManager->createPathInfo使用して、クエリ文字列が ...&var=val&... として生成されます。これを使用して、オンデマンドで URL のクエリ文字列バージョンを作成できます。&=

$url = $this->createAbsoluteUrl('/').'index.php?'.Yii::app()->urlManager->createPathInfo($arrayOfStuff);

または、次のことができる場合もあります。

Yii::app()->urlManager->urlFormat = 'get';
$this->createAbsoluteUrl('My/Path');
Yii::app()->urlManager->urlFormat = 'path';

私は2番目の方法をテストしていないし、テストしたくもありませんが。

于 2012-04-25T18:13:50.857 に答える
0

URL ルートは「ControllerID/ActionID」の形式である必要があります。マニュアル

手動リンクは CController 用であり、CApplication 用ではありません。

于 2012-04-25T15:10:49.847 に答える