早上看到几个 Laravel 的网站项目报同一个错误
ERROR: Creating default object from empty value {"userId":5,"exception":"[object] (ErrorException(code: 0): Creating default object from empty value at app/Http/Controllers/ProductController.php:15)
从 Nginx 日志看,错误是因为搜素引擎的爬虫,抓取了一个不存在的商品链接,例如 https://www.sunzhongwei.com/product?id=1024
而这个商品 ID 并不存在。
public function detail(Request $request, $product_id)
{
$item = Product::find($product_id); // 返回 NULL
$item->view_count += 1; // 报错:Creating default object from empty value
$item->timestamps = false;
$item->save();
return view('detail', [
"item" => $item,
]);
}
合理的做法应该是,直接返回 404。
Laravel 内置的 findOrFail 可以一行代码实现这个功能。
$item = Product::findOrFail($product_id);
这样,在对不存在的 model 对象进行操作时,就会直接返回 404 页面。
对应的,first 函数,也有 firstOrFail 的实现。
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式