2012-03-05 13 views
0

私はこの試みた:Kohana 3ルート:: 2番目のデフォルトルートを作成しますか?

Route::set('default_controllers', '(<controller>(/<action>(/<id>)))') 
->defaults(array(
    'controller' => 'welcome', 
    'action'  => 'index', 
)); 
Route::set('default', '<uri>') 
->defaults(array(
    'controller' => 'cms', 
    'directory' => 'cms', 
    'action'  => 'render', 
)); 

をしかし、実際に私は(レンダリングアクションで)「デフォルト」はdefault_controllersよりもまず来てほしいです。

最初にコントローラをチェックし、何もない場合は、2番目のデフォルトレンダリングを実行する必要があります。 Renderはデータベース内のURIをチェックし、存在する場合はページを返します。存在しない場合はエラーをスローします。

私は2つのルートの位置を切り替えるので、 'default_controllers'の前に来るので、cmsのページではうまく動作しますが、コントローラではうまく動作しません。レンダリング機能によってページが存在しないというエラーが発生しました)

ここで何をしますか?どうすればそれらを両方とも動作させることができますか?

答えて

1

基本的に2つのキャッチオールルートがあります。そのうちの1つを削除し、ルートをより具体的にする必要があります。 (<controller>(/<action>(/<id>)))ルートは実際には非常に悪いもので、例として提供されています。

0

これを動作させるには、どのコントローラをロードするかを経路に明示する必要があります。

Route::set('default_controllers', '(<controller>(/<action>(/<id>)))', array(
    'controller' => 'controller|anotherController|etcController' 
)) 
->defaults(array(
    'controller' => 'welcome', 
    'action'  => 'index', 
)); 

もしあなたが望むのであれば、コントローラを探してロード時間を増やさないようにキャッシュするクラスを書くことができます。この値を配列内のコントローラキーの値に渡します。

あなたの他のルートは、あなたがそれを持っていたどのように残ることができます。

Route::set('default', '<uri>') 
->defaults(array(
    'controller' => 'cms', 
    'directory' => 'cms', 
    'action'  => 'render', 
)); 
関連する問題