2017-08-01 111 views
0

如果我有以下兩條使用路由模型綁定的路由,其中​​每個模型的getRouteKeyName屬性已被超載以使用slug而不是id。 laravel如何知道使用哪條路線?Laravel 5.2使用相同簽名的路由模型綁定

Route::get('courses/{category}', function (App\Category $category) { 
    return $category->name; 
}); 

Route::get('courses/{location}', function (App\Location $location) { 
    return $location->name; 
}); 

測試路線:

www.domain.com/courses/accounting 

www.domain.com/courses/france 

第二條路線將永遠不會被看,因爲兩個路徑的路徑簽名是相同的?

回答

1

正如你所說,第二條路線永遠不會被解僱,因爲Laravel將採取匹配的第一條路線。

路線簡單地更改爲類似:

/categories/{category}/course/locations/{location}/course

-1

是的,由於路線的相同簽名,第二條路線永遠不會被查看。 您可以在Controller函數中處理它,因爲slug將作爲請求參數提供,您可以以此爲條件基礎返回結果。

Route::get('courses/{slug}',[email protected]); 

在你的控制器,你可以做這樣的:

public function myfunction($slug) 
{ 
    if($slug == "category") 
    { 
    $category = new \App\Category; 
    return $category->name; 
    } 
    if($slug == "location") 
    { 
    $location = new \App\Location; 
    return $location->name; 
    } 

} 
+0

這不會改變任何事情在題所給的代碼。事實上,你寫了更多的線條來完成完全相同的事情。 –

+0

我提供的解決方案將做這項工作,如果他想保留兩個路線相同的前綴URL。我同意這不是一個優雅的解決方案,並有更多的代碼行。 – PureSingh