假设我们有 2 条这样的路线:
Route::get('{categoryitem}', ['as' => 'category_index', 'uses' => 'CategoryDisplayController@index']);
Route::get('{entryitem}', ['as' => 'entry', 'uses' => 'EntryController@show']);
参数没有参数约束,定义了以下 2 个路由模型绑定(bind):
Route::bind('categoryitem', function($slug)
{
return Category::whereSlug($slug)->root()->firstOrFail();
});
Route::bind('entryitem', function($slug)
{
return Entry::whereSlug($slug)->firstOrFail();
});
现在让我们假设我们运行的 URL 是
http://project/something
.是否可以让 Laravel 在路由中首先查看 categoryitem
为 something
slug,如果没有找到模型,它会在第二条路径中查找带有 slug 的条目 something
?除了向路由添加一些前缀/后缀之外,我还没有找到解决方案
最佳答案
目前无法在条件下“跳过”路线。虽然有request on github如果由框架实现,这将允许跳过条件......
与此同时,您必须编写一条路线来捕获所有这些路线。并确定该项目是否存在于该路线(或 Controller ,如果您愿意)的内部。
Route::get('{slug}', function($slug){
// check if categoryitem exists
// else check if entryitem exists, etc...
});
显然,如果这变得有点多,则将代码移到 Controller 中
关于laravel - 如果未找到模型,则转到下一条匹配路线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26572774/