如果没有找到模型,则转到下一个匹配路线
Posted
技术标签:
【中文标题】如果没有找到模型,则转到下一个匹配路线【英文标题】:Going to next matching route if no model was found 【发布时间】:2014-12-21 18:12:35 【问题描述】:假设我们有 2 条这样的路线:
Route::get('categoryitem', ['as' => 'category_index', 'uses' => 'CategoryDisplayController@index']);
Route::get('entryitem', ['as' => 'entry', 'uses' => 'EntryController@show']);
参数没有参数约束,定义了以下2个路由模型绑定:
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
的条目?除了在路由中添加一些前缀/后缀之外,我还没有找到解决方案
【问题讨论】:
【参考方案1】:目前无法在某个条件下“跳过”路线。虽然有一个request on github 允许在框架实现时跳过某个条件...
与此同时,您将不得不编写一条路线来捕获所有这些路线。如果该项目存在,则确定该路线(或控制器,如果您愿意)的内部。
Route::get('slug', function($slug)
// check if categoryitem exists
// else check if entryitem exists, etc...
);
很明显,如果这变成了一点两段代码,就把它移到一个控制器中
【讨论】:
以上是关于如果没有找到模型,则转到下一个匹配路线的主要内容,如果未能解决你的问题,请参考以下文章
如果 Notepad.exe 正在运行,则 taskkill 如果未运行,则转到下一条语句