1

私の yii サイトのベース ドメインがhttp://ii.local.

http://events.ii.localコントローラーのすべてのアクションを処理する必要がある場合を除いて、すべてのコントローラー アクションはベース ドメインで表示できます。event

呼び出し$this->createUrl('/event/index',array('code' => 'guruevent')) では、次のように生成された URL が必要ですhttp://events.ii.local/guruevent

呼び出し$this->createUrl('/site/login') では、として生成された URL が必要http://ii.local/site/loginです。

'urlManager'=>array(
    'urlFormat'=>'path',
            'showScriptName'=>false,                             
            'caseSensitive'=>false,
        'rules'=>array(                                                                                     
                'http://events.ii.local/<code:\w+>'
                    => '<controller:event>/<action:index>', 
                'http://events.ii.local/<code:\w+>/<action:\w+>'
                    => '<controller:event>/<action>/<code>',
                '<controller:\w+>/<action:\w+>'
                    => '<controller>/<action>',
            ),
     ),

event サブドメインの URL が、/event/index?code=gurueventevents.ii.local サブドメインを使用して生成される場合と使用せずに生成される場合があります。

単一ドメインのルーティングは正常に機能していますが、いくつかのコントローラーとモジュールに対していくつかのサブドメインを使用する必要があります。request->baseUrl も設定しようとしましたが、http://ii.local/すべてのルーティング停止に設定するとすぐに、すべての URL に対して同じホームページが開きます。

修正を提案してください。

4

2 に答える 2

1

最初のルールと 2 番目のルールを入れ替えます。ルールは順番に処理され、最初に一致したルールが使用されます。UrlManager は最適な一致を探すのではなく、先着順で検索します。

以来

$this->createUrl('/event/index',array('code' => 'guruevent'))

最初のルールによって提供されるパターンに一致する場合、存在する「余分な」データに関係なく、そのルールを使用しますcode

経験則としては、常に最も具体的なルールを最初に置き、それらが一致することを確認してから、一般的なルールで終了して、詳細に違反するものをキャッチすることです。

于 2013-03-27T16:54:41.753 に答える
0

カスタム関数を使用して URL を作成できます。たとえばurl($route, $params=array())。内部で使用Yii::app()->createUrl()し、依存する$route場合は、他のホスト名を先頭に追加します。次に、プロジェクトで常にこの関数を使用して URL を作成します。

自信がある場合は、実装を強化し、その関数に$schema=''orのような引数を追加することもできます$absolute=false。このようにして、プロジェクトで必要になるあらゆる種類の URL 作成にこの関数を使用できます。

別の方法は、から拡張してからオーバーライドするカスタムurlManagerコンポーネントを作成することです。そこでは、上記と同じことができます: を調べて、適切な URL を作成します。CUrlManagercreateUrl()$route

于 2013-03-27T16:41:00.663 に答える