2013-07-16 49 views
1

所以我已簽出 PHP - Routing with Parameters in LaravelLaravel 4 mandatory parameters errorLaravel路由控制器,帶有強制參數

但使用的是什麼說 - 我似乎無法做一個簡單的路由不可能的,除非我不是瞭解如何過濾器/獲得/參數作品。

所以我想要做的是有一個路由URL顯示/ 2 其中顯示是一個行動和2是一個ID,但我想限制它只有數字。

我想

Route::get('displayproduct/(:num)','[email protected]'); 
Route::get('/', '[email protected]'); 

class SiteController extends BaseController { 

public function index() 
{ 

    return "i'm with index"; 
} 

public function display($id) 
{ 
    return $id; 
} 
} 

的問題是,它拋出404 如果我使用

Route::get('displayproduct/{id}','[email protected]'); 

它將傳遞參數然而,URL可以是顯示/ ABC,它會通過參數。 我想僅限於數字。

我也不希望它是寧靜的,因爲索引我理想地想要混合這個控制器與不同的行動。

回答

8

假設你使用Laravel 4,你不能使用(:num),你需要使用一個正則表達式來過濾。

Route::get('displayproduct/{id}','[email protected]')->where('id', '[0-9]+'); 
+0

so(:num)(:any)以及所有不起作用的東西? – azngunit81

+0

正確,所有約束都使用正則表達式完成,使用{id}將允許任何內容匹配。看看http://laravel.com/docs/routing#route-parameters – dragoon

+0

tks - 代碼快樂需要更新他們的文檔 – azngunit81

3

您也可以定義全局路由模式

Route::pattern('id', '\d+'); 

如何/如果這是有幫助嗎?

假設你有需要的參數多條路線(可以說id):

Route::get('displayproduct/{id}','[email protected]'); 
Route::get('editproduct/{id}','[email protected]'); 

而且你知道,在所有情況下id必須是數字(一個或多個)。

然後,只需在所有線路上的所有id參數設置一個約束,可以使用Route patterns

Route::pattern('id', '\d+'); 

上述否則將確保接受id作爲參數的所有路由將應用約束該id需求成爲一個數字。

+0

對不起 - 我不明白那個 - 我還沒有見過任何人使用那一個 – azngunit81

+0

@ azngunit81查看更新回答 –

+0

對於遲到尋找你的答案感到抱歉 - 它是有效的,如果模式是一種實際模式。因爲您可以將其限制爲數字,所以在哪裏是首選。它相當於做一個preg_reg比較is_numeric - is_numeric產生更快的結果 – azngunit81