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

kohana 3.2路線上的參數是否有上限?最大。 kohana路線上的參數

我在自舉中實現了這條路線,但每次嘗試通過year值時我都會收到404錯誤!

單獨傳遞身份證即可正常工作。

我錯過了什麼嗎?

這是處理該路由的控制器操作:

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 2011-12-21 18:49:21

+0

http://domain.com/category/date/3/2011 – FMK 2012-01-12 22:05:32

回答

1

Kohana應該將其轉移到正確的行爲,併爲我做。我的猜測是,你要麼覆蓋該路線,其中一個也被命名爲'category',或者被另一個路由匹配,該行爲拋出一個Kohana_Exception_404。

您應該可以通過查看堆棧跟蹤來解散/驗證Kohana_Exception_404是否從方法拋出。

路由名稱用作存儲路由的陣列的密鑰名稱,如下所示。兩次使用相同的名稱會覆蓋之前的名稱下的路由。

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

我已經使用了兩條路線中的路線名稱相同!這解決了我的問題! – FMK 2012-01-13 15:49:35

2

沒有,有沒有限制。確保此路線高於默認路線(或一起刪除默認路線)。

+0

嗨,謝謝,但路由已超過默認路由並刪除它也不起作用。 – FMK 2011-12-21 17:22:12

0

嘗試使非可選(刪除括號),然後看它是否工作。另外,你的代碼似乎有一個邏輯錯誤。在您的原始代碼中,$ year將始終被設置,因此if語句總是被跳過。試着用替換if語句和前行吧:

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

哦,作爲brucey獎金,因此不需要時間的額外調用()日期()默認爲當前的時間戳。希望現在適合你。

+0

感謝後面的日期,但它仍然無法工作,即使我將其定義爲非可選:HTTP_Exception_404 [404]:無法找到匹配URI的路線:category/date/3/2011 – FMK 2012-01-12 22:06:37