Laravel 5.2使用相同签名的路由模型绑定

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

} 
+0

这不会改变任何事情在题所给的代码。事实上,你写了更多的线条来完成完全相同的事情。 –

+0

我提供的解决方案将做这项工作,如果他想保留两个路线相同的前缀URL。我同意这不是一个优雅的解决方案,并有更多的代码行。 – PureSingh