2

私は私の中に持っていますroutes.php

$route['ctrller1/method1/video/(:num)'] = 'ctrller2/method2/$1';

ctrller1メソッドを持つ名前付きのコントローラーもあります。

function method1 ($str = NULL) {
    // do something
}

問題は、controller1 を編集できない、または編集すべきではないため、controller2 を使用する必要があることです。私が望んでいることは一見単純ですが、どうやら CI は私と一緒に仕事をしたくないようです。

url:
domain.com/ctrller1/method1/edit
が呼び出されると、内部のメソッドが呼び出され、呼び出されctrller1た場合domain.com/ctrller1/method1/videos/1
はメソッドが呼び出さctrller2れます。

私にはすべて正しいように思えますが、うまくいきません。だから、私は何かが欠けているに違いない。これをルーティングに追加しようとしました:

$route['ctrller1/method1/(edit)'] = 'ctrller1/method1/($1)';

しかし、それはいけません。ここで何か間違っている人はいますか?

4

2 に答える 2

1

アクセス許可 (ファイアウォールなど) と同様に、ルートを操作するときはいつでも順序が重要です。通常、次の順序でルートを整理します。

  1. 最も定義された
  2. あまり定義されていない
  3. 一般/フォールバック

明確にするために、ルートの順序は次のようにする必要があります。

$route['ctrller1/method1/videos/view/(:num)'] = 'ctrller2/method3/$1';
$route['ctrller1/method1/videos/(:num)'] = 'ctrller2/method2/$1';
$route['ctrller1/(:num)'] = 'ctrller2/method1/$1';

URL が呼び出されると、ルート テーブルが通過し、最初に最も近い一致を見つけます。それ以外の場合は、次のルートにトラバースします。

この場合、あなたが望むのは次のようなものです:

domain.com/ctrller1/method1/videos/1
domain.com/ctrller1/method1/edit

その理由は、ビデオのルートがより具体的であり、舞台裏で別のコントローラーにルーティングするため、特別なケースでもあるからです。

そのときのルートは次のようになります (テストされていませんが、そうである必要があります)。

$route['ctrller1/method1/videos/(:num)'] = 'ctrller2/method2/$1';
$route['ctrller1/method1/edit'] = 'ctrller1/method1';

補足として、私はなぜあなたがそれを書式設定し、のようなctrller1/method1/videos/ものではないことに興味があります。混乱しているようです。しかし、繰り返しになりますが、ここにはすべての詳細がありません。ctrller1/videos/view/12355ctrller1/videos/edit/12355method1

コメントではないにしても、うまくいくことを願っています。もう少し明確にしたら、質問を再検討します。

于 2012-06-05T13:09:50.523 に答える
0

さて、あなたはvideoある場所とvideos別の場所にいますか?

に変更するか

$route['ctrller1/method1/videos/(:num)'] = 'ctrller2/method2/$1';

または URL を試してください: domain.com/ctrller1/method1/ video /1

于 2012-06-05T11:37:41.817 に答える