使用 resource 定义路由访问不存在的 id 为什么没有 404 ?

我使用 resource 注册了路由 u 来显示个人中心,访问 laravel.test/u/2 (并没有 id 为 2 的数据),竟然不显示 404,打印 $user->name 也为 null

如果用 user 或者 users 就正常。

// 异常,没有数据但显示页面
Route::resource('/u', 'UsersController', ['only' => ['show', 'edit', 'update']]);

// 正常,没有数据显示 404 页面
Route::resource('/user', 'UsersController', ['only' => ['show', 'edit', 'update']]);
Route::resource('/users', 'UsersController', ['only' => ['show', 'edit', 'update']]);

当我改为一条一条的定义路由时,访问就会显示 404,Bug 吗?

// 正常
Route::get('/u/{user}', 'UsersController@show')->name('u.show');
Route::get('/u/{user}/edit', 'UsersController@edit')->name('u.edit');
Route::patch('/u/{user}', 'UsersController@update')->name('u.update');
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

是我控制器里 compact('user') 写成了 compact($user) 导致的 :joy:

5年前 评论
讨论数量: 4
ibucoin

$user 会匹配路由片段中的 {user},这样,Laravel 会自动注入与请求 URI 中传入的 ID 对应的用户模型实例
这个概念应该是涉及到路由绑定。
你第一个laravel.test/u/2不显示404,而显示null的话,代表没有绑定到模型,所以那个$user其实依赖注入了一个空User

5年前 评论
ibucoin

你可以用route::list来看一下相关的路由地址

5年前 评论

@ibucoin 查看了,路由都注册上了,确实有问题

5年前 评论

是我控制器里 compact('user') 写成了 compact($user) 导致的 :joy:

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!