2011-12-21 4 views
0
Route::set('category', 'category/date/<id>(/<year>)', array('id' => '[0-9]+', 'year' => '[0-9]+')) 
->defaults(array(
     'controller' => 'category', 
     'action' => 'date', 
    )); 

コナナ3.2ルートのパラメータの上限はありますか?コナナルートのパラメータ

ブートストラップでこのルートを実装しましたが、毎回yearの値を渡そうとすると、404エラーが発生します。

IDだけを渡すだけで正常に動作します。

何か不足していますか?

これは、このルートを処理するためのコントローラのアクションです:

public function action_date() { 
    $id = $this->request->param('id'); 
    $year = $this->request->param('year'); 
    if(!isset($year) && $year == ""){ 
     $year = date("Y", time()); 
    } 
    //Do fancy stuff here... and hand it to the view! 
} 
+0

リクエストしてみてください。 – Darsstar

+0

http://domain.com/category/date/3/2011 – FMK

答えて

1

コナナはそれを正しい行動にルーティングする必要があります。私の推測では、そのルートを「カテゴリ」という名前で上書きするか、別のルートで一致させてKohana_Exception_404をスローするというものです。

スタックトレースを見て、メソッドからKohana_Exception_404がスローされたかどうかを確認することができます。

ルート名は、ルートが格納されているアレイのキー名として使用されます(下記参照)。同じ名前を2回使用すると、その名前の元のルートが上書きされます。

public static function set($name, $uri_callback = NULL, $regex = NULL) 
{ 
    return Route::$_routes[$name] = new Route($uri_callback, $regex); 
} 

あなたは、ルーティングに使用されるすべてのルートを確認するために、どこかのアクションに次のように使用することもできます$this->response->body(Debug::vars(Route::all())); その後、あなたは「カテゴリ」ルートまたは類似のコンパイル済みの正規表現をチェックすることができます。

+0

私は2つのルートで同じルート名!それは私の問題を解決! – FMK

2

いいえ、制限はありません。このルートがデフォルトルートを上回っていることを確認してください(またはデフォルトをすべて一緒に削除してください)。

+0

こんにちは、ありがとうございますが、ルートはデフォルトのルートを超えており、削除することもできません。 – FMK

0

非オプション(括弧を削除)を試して、それが動作するかどうかを確認してください。また、あなたのコードにロジックバグがあるようです。元のコードでは、$ yearは常にセットされ、if文は常にスキップされます。必要とされていない)ああとbruceyボーナスとして、日付()デフォルトは、時間(と余分呼び出して、現在のタイムスタンプに

$year = $this->request->param('year', date('Y')); 

:とその前にif文と行を交換してみてください。あなたのために今働くことを望みます。

+0

日付の後ろにありがとうが、私はそれを非オプションとして定義しても動作しません:HTTP_Exception_404 [404]:URIに一致するルートを見つけることができません:カテゴリ/日付/ 3/2011 – FMK