Laravel 5.2使用相同签名的路由模型绑定
问题描述:
如果我有以下两条使用路由模型绑定的路由,其中每个模型的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
第二条路线将永远不会被看,因为两个路径的路径签名是相同的?
答
正如你所说,第二条路线永远不会被解雇,因为Laravel将采取匹配的第一条路线。
路线简单地更改为类似:
/categories/{category}/course
和/locations/{location}/course
。
答
是的,由于路线的相同签名,第二条路线永远不会被查看。 您可以在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;
}
}
这不会改变任何事情在题所给的代码。事实上,你写了更多的线条来完成完全相同的事情。 –
我提供的解决方案将做这项工作,如果他想保留两个路线相同的前缀URL。我同意这不是一个优雅的解决方案,并有更多的代码行。 – PureSingh