1

私のKohana3.2プロジェクトには複数のコントローラーがあり、最初は次のようなルートがあります。

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

それは私のすべての新しいコントローラーで正常に機能していました(新しいファイルを追加してドメイン/コントローラーに移動したとき、それは魅力のように機能しました。

ここで、親と呼ばれる特定のコントローラーについて、ブートストラップに新しい行を追加する必要がありました。

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

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

/parents//parent/ index / idの両方にアクセスしようとしましたが、適切な場所にない場合は両方ともエラーが発生しRoute::setました。

これらの行がないと、常に次のようなエラーが発生します。

URIに一致するルートが見つかりません

また

要求されたルートが存在しません

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

4

2 に答える 2

1

このすべてに1つのルートを使用することをお勧めします。

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

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

電話をかけると、コントローラーに到達します。電話をかける/parents/fatherと、parents/parent/fatherparent

于 2012-04-18T06:44:51.620 に答える
1

実際には、あなたの場合はデフォルトルートだけでカバーされます。

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

まず、コハナはあなたの正規表現パターン[((/(/)))]と照合しようとします。これはURLと一致します:users、users / delete、users / delete / 1、parents、parents / view、parents / view/2など。

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がある場合はそれらを追加することです。

于 2012-04-20T04:23:40.653 に答える