2012-04-17 12 views
1

にデフォルトのルールによって捕捉されないコントローラーのための余分なルートを必要としますそれは魅力のように働いたドメイン/コントローラブートストラップは、私が最初にルート私のKohana 3.2のプロジェクトで複数のコントローラを持っているKohanaの3.2

今、私は私のブートストラップに新しい行を追加する必要がありました両親と呼ばれる特定のコントローラのために:私は、新しいファイルを追加しに行ってきました。

Route::set('parents', '(<controller>(/<action>))') 
->defaults(array(
'controller' => 'parents', 
'action'  => 'index', 
)); 

Route::set('parent', '(<controller>(/<action>(/<id>)))') 
->defaults(array(
'controller' => 'parent', 
'action'  => 'index', 
)); 

私は両方にアクセスしようとしていた:/両親/を/親/インデックス/ IDと場所にRoute::setを持っていないときの両方でエラーが発生しました。

要求されたルートが

存在しないURI

OR

と一致するルートを見つけることができません

は、それらの線がなければ、私はいつものようなエラーを得ました

どうすればいいですか?私が追加したすべてのコントローラに対して、私はブートストラップでそれを定義する必要がありますか?

+0

このエラーでどのURIにアクセスしようとしていますか? –

+0

私は/ parents /と/ parent/index/idの両方にアクセスしようとしていました。 – Tarek

答えて

1

に取得/parent/father呼び出す場合は、parentsコントローラを取得しますあなたのケースではデフォルトルートだけで覆われています。

Route::set('default', '(<controller>(/<action>(/<id>)))') 
->defaults(array(
    'controller' => 'user', 
    'action'  => 'index', 
)); 

まず、Kohanaのは、あなたの正規表現パターンを照合します[((/(/)))]。ユーザー、ユーザー/削除、ユーザー/削除/ 1、親、親/ビュー、親/ビュー/ 2などのURLに一致します。

Kohanaがアクションを検出できない場合、デフォルトのアレイルールに基づいています。 Kohanaがコントローラーを見つけることができない場合(本質的に何も渡されなかったことを意味する)、コントローラを使用します。最後のケースでは、コントローラーを正規表現に渡さずにアクションを渡すことができないので、アクションをデフォルトします(括弧ではコントローラーが最初に必要で、次にアクションでidが必要です)。

URL: /users 
Controller: users 
Action: index (picked default) 

URL: /users/kill/1 
Controller: users  
Action: kill 
Id: 1 

URL: /parents 
Controller: parents 
Action: index (picked default)  

URL: /parent/view 
Controller: parent 
Action: view 

ベストプラクティスは、最後のルートが適用される(基本的にデフォルトとすべてをキャッチ)このルートを維持することであり、あなたがドン」のURLを持っている場合:

したがって、次の例では、このデフォルトのパターンを通るルートますデフォルトのパターンと一致するものを追加します。

1

私はより良い、すべてこのために1つのルートを使用したい:

Route::set('p', '(<controller>(/<action>(/<id>)))') 

->defaults(array(
'action'  => 'index', 
)); 

をあなたは/parents/fatherを呼び出す場合 - あなたが実際にあなたがなりたいあなたはparent

関連する問題