为什么依赖注入获取的对象为空?

回过头来问一个傻问题,今天写项目时,发现一个基本的方法出现了问题

public function show(Product $product)
{
    return response()->json($product);
}

得到的 $product 是一个空数组。

但是

public function show($id)
{
    return response()->json($id);
}

这里获取到的 id 却为 1. 为什么?是我忽略了什么地方吗?求提示

JasonG
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 7
finecho
 /**
  * @param \App\Product $product
  *
  * @return \Illuminate\Http\JsonResponse
  */
 public function show(Product $product)
 {
     return response()->json($product);
 }

 //路由定义(二选一)
 Route::resource('product', 'ProductController');
 Route::get('/product/{product}', 'ProductController@show');

就这两步呀,哈哈

5年前 评论
JasonG

@Lhao 正常来说 第一个应该返回的是 id 为 1 的 product 对象,但是我返回了空数组哦。数据是存在的。

5年前 评论
finecho

@JasonG 你是不是路由写错了呀,如果对象不存在的话是直接 404 了的也不会出现空数组的情况, 除非:

Route::get('/product/{id}', 'ProductController@show');

这个时候就会出现空数组,Id 为1。

5年前 评论
JasonG

@Lhao 最后发现问题出在中间件上,我引用的中间件少了一个 \Illuminate\Routing\Middleware\SubstituteBindings::class,应该是这个中间件来完成 查询 id 对应模型的对象的操作。

5年前 评论
finecho

@JasonG 刚才去查了一下,还真是,哈哈,长见识了

5年前 评论

SubstituteBindings 中间件就是专门用于解析路由绑定用的。

5年前 评论

@JasonG 这个问题我也遇到了,但是并没有需要修改什么中间件的操作啊

2年前 评论

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