如果我使用路由模型绑定有以下两个路由,其中每个模型的getRouteKeyName
属性被覆盖以使用slug而不是id。 laravel如何知道使用哪条路线?
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
由于两条路线的路线签名完全相同,因此永远不会查看第二条路线?
答案 0 :(得分:1)
正如你所说,第二条路线永远不会被解雇,因为Laravel将采取匹配的第一条路线。
只需将您的路线更改为:
/categories/{category}/course
和/locations/{location}/course
。
答案 1 :(得分:-1)
是的,由于路线的相同签名,永远不会看第二条路线。 您可以在Controller函数中处理它,因为slug可用作请求参数,您可以在条件的基础上返回结果。
Route::get('courses/{slug}',MyController@myfunction);
在您的控制器中,您可以这样做:
public function myfunction($slug)
{
if($slug == "category")
{
$category = new \App\Category;
return $category->name;
}
if($slug == "location")
{
$location = new \App\Location;
return $location->name;
}
}