2016-07-02 26 views
0

我建立了一個項目,Laravel 5.2另一條路線後不能正常工作,並在routes.php文件我在接下來的2條路線:Laravel:有些線路如果它進來`routes.php`文件

Route::get("/products/{id}", [ 
    "as" => "products.show", 
    "uses" => "[email protected]", 
]); 

Route::get("/products/search", [ 
    "as" => "products.search", 
    "uses" => "[email protected]", 
]); 

在這種秩序中,第一條路線products.show工作正常,並符合市場預期,但第二條路線products.search不,它給出了一個空白的網頁,而不是預期的搜索結果。

我試圖通過更改他們的訂單並將products.search路線放置在products.show路線之前,以及當我這樣做時,它工作正常,並按預期方式解決問題。

那麼,什麼是錯的?爲什麼發生這種情況?

PS:另一種解決方案是把明年的規則在route.php文件的開頭:

Route::pattern("id", "[0-9]+"); 

當我加入這個規則,兩條路線的工作發現,它並不重要的人來第一。但是如果我沒有添加這個規則呢?

回答

4

路由系統,只要它找到一個匹配停止。因此,讓我們說你有三個:

Route::get("/products/{variableA}" // ... 
Route::get("/products/{variableB}" // ... 
Route::get("/products/{variableC}" // ... 

現在你去/products/someroute。只有第一個將觸發,和兩個以下的人將永遠不會被激活。

您的模式約束意味着當您轉到/products/search時,第一個不會觸發,因爲它正在查找數字{id}變量。

沒有這種約束,{id}可以是任何東西 - 像串search的實例。那麼,那麼第二條路線不會觸發。所以你需要把它們倒過來才能工作。

您還可以使用路線模型綁定,您可以在此處閱讀:https://laravel.com/docs/5.2/routing#route-model-binding