检查模型是否存在,如果在 Laravel 中找不到则继续路由

2024-03-24

我有两个模型,我不想在其 URL 前面添加前缀。例如。用户和帖子

如果我有一个网址https://example.com/title-of-the-post https://example.com/title-of-the-post and https://example.com/用户名 https://example.com/username

我会在web.php路线文件:

// User
Route::get('{slug}', function ($slug) {
    $user = User::whereSlug($slug)->get();
    return view('users.show', $user);
});

// Post
Route::get('{slug}', function ($slug) {
    $post = Post::whereSlug($slug)->get();
    return view('posts.show', $user);
});

现在我面临的问题是,输入第一条路线后,即使没有具有匹配的slug的模型,也永远不会到达第二条路线。

如果我怎样才能退出到下一条路线(邮政)$user没有找到吗?

注意:我尝试了许多不同的退出策略,但似乎都不起作用。

return;
return false;
return null;
// and return nothing

提前致谢!

UPDATE:

另一个问题是,如果我有其他resource他们的路线也被第一条路线阻挡。

例如。如果我有Route::resource('cars', 'CarController')它生成一个/cars与 {slug} 匹配并且也被第一个用户路由阻止的路径。


我认为您已经有了这个想法,但我在我的应用程序中有类似的设置,在我的特定情况下,我还需要能够捕获多段路线。

我就是这样做的。例如,我的最后一条路线web.php如下。

Route::get('{catchall}', 'SlugRoutesController@route')->where('catchall', '.*');

所在班级->where('catchall', '.*');确保我们也能够捕获具有多个片段的蛞蝓。

例如,以下路由都会被匹配:

/blog/this-is-an-article
/user/mozammil/articles

然后,在我的SlugRoutesController,我能够注入我的其他控制器依赖项。

<?php

namespace App\Http\Controllers;

use App\Post; 
use App\User; 
use PostController;
use UserController; 
use Illuminate\Http\Request;

class HomeController extends Controller
{
    private $postController;
    private $userController;

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct(UserController $userController, PostController $postController)
    {
        $this->userController = $userController; 
        $this->postController = $postController; 
    }

    public function route(Request $request, string $slug)
    {
        $post = Post::where('slug', $slug)->first(); 
        if(post) {
            return $this->postController->index($request); 
        }

        $user = User::where('slug', $slug)->first(); 
        if($user) {
            return $this->userController->index($request); 
        }

        abort(404);
    }
}

我的实际控制器比这复杂一点,但你明白了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检查模型是否存在,如果在 Laravel 中找不到则继续路由 的相关文章

  • 在 PHP 中验证约 400MB 的大型 XML 文件

    我有一个很大的 XML 文件 大约 400MB 在开始处理之前我需要确保它的格式正确 我尝试的第一件事是类似于下面的内容 这很棒 因为我可以找出 XML 是否格式不正确以及 XML 的哪些部分 不好 doc simplexml load s
  • 命令运行时从 shell_exec 命令获取输出

    我正在编写一个 PHP 脚本网页 该网页旨在接受先前上传到服务器的 JFFS2 图像的文件名 然后 该脚本将使用映像重新刷新服务器上的分区 并输出结果 我一直在用这个 tmp shell exec update flash v filena
  • 上传非常大的文件(>5GB)

    我需要你的帮助 我想用 HTML JQuery 和 PHP 创建一个上传脚本 是否可以编写一个可以上传非常大的文件 gt 5 GB 的脚本 我已经尝试使用 FileReader FormData 和 Blobs 但即使使用这些 我也无法上传
  • 如何在MySQL选择查询中编写正则表达式?

    我尝试过这个表达 b word w b i比较一个word对照其他单词列表来查找重复项 我用了preg math all 效果很好 我想做同样的事情 但这次检查从 mysql 数据库检索到的单词 这是我写的 SELECT FROM tabl
  • PHP中是否可以使用filter_var过滤带小数点的整数?

    我需要像这样过滤值100 50在 PHP 中使用filter var 现在我这样使用 filter var POST amount FILTER SANITIZE NUMBER INT 它给我的结果是10050 我怎么解决这个问题 提前致谢
  • PHP 中两个关联多维数组的值求和

    我正在尝试对两个关联数组的值求和 这是第一个数组 Array Jan 01 2013 gt Array COM gt 100 RES gt 200 Oct 28 2014 gt Array COM gt 300 RES gt 400 这是第
  • 如何限制 JSON 访问?

    我有一个 Web 应用程序 可以从新创建的 JSON API 中提取数据 我的静态 HTML 页面通过 JavaScript 从静态 HTML 页面动态调用 JSON API 如何限制对 JSON API 的访问 以便只有我 我的网站 可以
  • 数组和关联数组合并

    如何实现第三个数组 合并Array1和Array2 在 PHP 中做到这一点的最佳方法是什么 非常感谢 Array2 具有类似索引 键 即 Array1 中 id 的关联值 Array1 Array 0 gt Array id gt 56
  • YouTube 频道 URL 的正则表达式

    如何使用 REGEX 验证 YouTube 频道 URL 我发现了这个模式 但它不能正常工作 http https www youtube com channel user a zA Z0 9 1 谁能帮我 你的问题是之后的额外管道user
  • 从本地 html/javascript 网站插入 mySQL 数据库

    我正在尝试做什么 我的程序的目的是插入数据local HTML JS网站变成online 非本地 mySQL数据库 到目前为止我尝试过的 我试图用来实现此目的的原始方法是让我的本地网站使用 javascript 通过在线发布数据PHP文件
  • 一个表单包含两个提交按钮,每个按钮都有不同的操作

    我花了几个小时试图找到问题的解决方案 但似乎找不到正确的解决方案 提前感谢你的帮助 我有一个 html 表单
  • 如何从 jquery .load 获取 php 响应

    例如我给出另一个代码 这是我的 some3 php 代码 第一个文件
  • 我可以在 Laravel 5.2 中创建一个继承自 User 的新类吗?

    我对 Laravel 还很陌生 使用的是迄今为止的最新版本 5 2 因此我遇到了以下困境 我知道 Laravel 附带了一个User开箱即用的类 但我想开发一个系统 在其中我可以有另外两种类型的用户 称为Researcher and Adm
  • 返回早期概念在 PHP 中有何用处

    我已经在以下链接中了解了最佳实践https pear php net manual en standards bestpractices php https pear php net manual en standards bestprac
  • 使用mysql数据按高低价格排序

    这是我所拥有的以及我想做的 我的 MySql 数据库中有 12 个项目 4 个产品为 4 99 4 个产品为 3 99 4 个产品为 2 99 我意识到我可以像这样查询数据库 它会给我一个该价格的产品列表
  • 为什么 strtotime('a') 返回时间?

    我正在 PHP 5 3 中循环遍历 CSV 文件并检查日期 我一直在使用 strtotime 它运行良好 除了我有一个包含 1 或 2 个字符代码的字段 任何单个字符代码上的 strtotime 似乎都像我要求 now 一样 但如果代码是
  • 根据产品属性在 Magento 中创建购物车规则

    我在一个类别中有产品 针 有些以 100 支为一包出售 有些以 500 支为一包出售 盒子中的针数被设置为产品属性 我想根据购物车中的针总数应用购物车规则 F x 如果您购买 1000 2000 根针头 无论 500 100 包的组合如何
  • Laravel 更新雄辩事件:获取数据

    我一直在读有关雄辩事件的文章 与模型的每次交互都有一个事件 创建 创建 更新 更新 保存 保存 删除 删除 恢复 恢复 我想知道模型更新后的数据以及之前的数据 是否可以 因为文档没有太多关于如何使用这些事件的信息 您正在寻找getDirty
  • 未找到教义列:1054“字段列表”中未知列“s.features”

    我在站点表中添加了一个新列 features 并使用 Doctrine 重新生成了模型 此代码导致错误 siteTable Doctrine Core getTable Site site siteTable gt findOneByNam
  • Cakephp - CSRF 令牌不匹配

    我在 Cakephp 3 6 中有一个项目 其中 MessageController 中的 3 个操作由 Ajax 调用 但是 我有一个问题 当我向其中一个操作发送请求时 XHR 会向我返回以下内容 message CSRF token m

随机推荐

  • 如何保护资产文件夹中的数据库 sqlite(通过加密)?

    我有过逆向工程的经验 人们可以在android中安静流畅地访问你的数据库 我想知道有什么方法可以在创建时仅对我的数据库进行加密 而不是混淆整个apk 然后在运行时我将使用我的数据库 我对数据库的了解较少 因此任何建议都有助于保护资产文件夹中
  • 防止 LISP 中的终端输出

    我想运行一个函数 但不让它在终端中输出结果 例如 set A B 正常返回B在控制台中如下所示 gt gt gt set A B B gt gt gt A B 我不希望它返回任何东西 我仍然希望该函数能够完成它应该做的事情 只是默默地 gt
  • 良好的 javascript 参考 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 什么是一本好的 javascript 书籍或网站 不仅关注语法 而且很好地解释了 javascript
  • ld 链接问题:/usr/bin/ld: 找不到 [libraryname]

    我使用 Qmake 在 Ubuntu 9 10 上构建共享库 此共享库 A 依赖于另一个共享库 B B项目已成功建设 在项目 A 的 pro 文件中 我的 LIBS 变量如下所示 LIBS L datelib bin llibdatelib
  • 如何捕获 SOAP Webservice 方法中的任何异常?

    我提供一个SOAP WebMethod using Spring and CXF 我想捕获任何异常 已检查和未检查 并将它们转换为自定义 WebFault 我可以以某种方式为我的错误处理程序 拦截器分配一个错误处理程序 拦截器吗 WebSe
  • 如何在 JAXB 封送期间添加 XML 处理指令

    每当序列化集合 数组属性以获得类似的内容时 我想添加处理指令
  • EventHandler 和 SinkEvent 是否执行相同的功能工作?

    我正在使用 GWT 我开始通过添加事件处理程序向我的小部件添加事件 事件处理程序示例代码 widget addClickHandler new ClickHandler Override public void onClick ClickE
  • 为什么 PHPexcel 在日期字段中插入单引号?

    我正在尝试使用 PHPExcel 将日期插入单元格 这是我的代码 include xlsx Classes PHPExcel php include xlsx Classes PHPExcel Calculation php include
  • Git 签出到特定目录

    所以 目前我正在努力合并两个分支 A and B 我正在合并到分支B 但我已将项目重组到不同的目录中 并且想做一个git checkout A path fileToGet各种各样的 意图是覆盖 但是变成了我的分支中的不同目录 为了保留文件
  • 解析 2 位数年份:使用未知日期模式设置基准日期

    用户将以不同模式输入日期到我的应用程序 对于两位数年份 他还必须确定枢轴日期 Example 图案 yy MM dd基准日期 70 我以编程方式添加当前千年和上个世纪以获得更多动态 gt 1970 69 04 22变成2069 04 22
  • 在没有“应用程序许可”的情况下获取访问者的 Facebook 信息——Yelp 是如何做到的?

    好的 我花了几个小时仔细研究有关 xFBML Open Graph 等的分散的 FB 文档 其中大部分似乎已被弃用 无论如何 当访问者访问我的网站 假设他们已经登录 FB 时 我试图获取他们的 Facebook 用户 ID 或姓名 图片或其
  • 连接 JSONArray

    我在用JSON数组 http www json org javadoc org json JSONArray html在下面org json包裹 我的第一个 JSONArray 是这样的 249404 VPR249404 249403 VP
  • C++ 中的作用域和返回值

    我重新开始使用 c 并正在考虑变量的范围 如果我在函数内有一个变量 然后我返回该变量 那么该变量在返回时不会因为它所在的作用域已结束而 死亡 吗 我已经尝试过使用返回字符串的函数 它确实有效 谁能解释一下吗 或者至少给我指出一些可以向我解释
  • 使用自适应布局的 UILabel 的不同字体大小

    在 Xcode 6 中 我们有一个称为自适应布局的新功能 通过使用它 我创建了一个新项目 在其中我需要根据布局具有不同的字体大小 在 iPhone 3 5 英寸屏幕中 我必须将字体大小设置为 17pt 而 iPhone 中的其他屏幕大小必须
  • 让 Grails 监听外部 IP 地址

    我启动了一个 Grails 应用程序来侦听默认端口 8080 并以 root 身份运行 grails 以侦听端口 80 grails Dserver port 80 run app 这在本地主机上运行得很好 但是当我从外部 IP 地址访问它
  • 动态获取 docker-compose 创建的正在运行的容器名称

    当我运行 docker compose 时 它 会创建一个 Web 容器和 postgres 容器 我想通过类似的方式手动触发我的 Django 测试运行 docker compose run web python manage py te
  • 对于系统文本的多语言支持 x 种语言来说,这是一个很好的设计吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 这个实现的扩展性是否良好 要求是 系统必须支持x种语言 其中 x will 企业可以翻译的尽可能多的语言 所有系统维护的值 页面内容 电子邮件内
  • 使用 AVPlayer 传输音频

    当在表视图中选择一行但它不播放时 我尝试使用 AVPlayer 播放 URL 中的音频 我究竟做错了什么 这是代码 void tableView UITableView tableView didSelectRowAtIndexPath N
  • 如何在 Xcode 中使用 boost::multi precision::float128

    我正在尝试在 xCode 项目中使用 boost multi precision float128 我的编译器版本是 Apple clang 版本 11 0 0 clang 1100 0 20 17 目标 x86 64 apple darw
  • 检查模型是否存在,如果在 Laravel 中找不到则继续路由

    我有两个模型 我不想在其 URL 前面添加前缀 例如 用户和帖子 如果我有一个网址https example com title of the post https example com title of the post and htt