Laravel 5.2路由模型绑定具有相同的签名

时间:2017-08-01 08:12:28

标签: routes laravel-5.2

如果我使用路由模型绑定有以下两个路由,其中​​每个模型的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

由于两条路线的路线签名完全相同,因此永远不会查看第二条路线?

2 个答案:

答案 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;
   }

}