如果没有找到模型,则转到下一个匹配路线

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 如果未运行,则转到下一条语句

Oracle 程序:从表 A 中读取,如果没有找到,则转到表 B

如果需要的页面存在,如何进行链接测试,如果存在则转到它?

Swift - 如果条件满足,则转到特定视图

Java或C#调用命令行批处理命令如何获得返回值

快速发送ui数据