laravel - 仅加载具有现有参数的路线
问题描述
我在做一个粗略的事情,我想使用 id 显示项目数据,我在 web.php 中有这个:
Route::get('update/{id}', 'CrudController@update');
如何拒绝用户将路径中的 ID 更改为不存在的 ID?那只显示那些存在的和那些不存在的,不加载的?
解决方案
在您的更新方法中,您可以执行以下操作:
public function update($id)
{
MyModel::findOrFail($id);
//...perform other actions
}
$id
如果请求的请求不存在,它将抛出 404 响应。
然后,您可以根据需要在以下render()
方法中捕获它app\Exceptions\Handler.php
:
use Illuminate\Database\Eloquent\ModelNotFoundException;
.
.
.
public function render($request, Exception $exception)
{
if ($exception instanceof ModelNotFoundException) {
if ($request->wantsJson()) {
return response()->json([
'data' => 'Resource not found'
], 404);
} else {
abort(404);
}
}
return parent::render($request, $exception);
}
或者,如果您不想经历在处理程序中配置它的所有麻烦,您也可以这样做:
public function update($id)
{
if (! $model = MyModel::find($id)) {
abort(404);
}
//...perform other actions with $model
}
该abort(404)
方法将用户带到Page not found
laravel 的默认页面,这是一个合适的做法。
推荐阅读
- php - Laravel 7:使用 API 端点 + 单页应用程序验证电子邮件
- sql - 获取具有两个日期列的所有行,其中日期在指定间隔内或之间
- flutter - Flutter/Dart- 在 null 上调用了方法“replaceAll”。如何检查字符串是否存在?
- javascript - 我怎样才能延迟表单操作?
- swift - 观察者和图像获取无法按预期工作
- html - 我可以在 html 中做正则表达式来匹配 css 和 js 吗?
- sql - 如果前两列的答案匹配,则创建一个返回“是”的列
- javascript - 如何移动我的 h3 元素以与 span 元素垂直对齐?
- java - 使用 Tabula 使用 Python 读取 pdf 时出现 Java 错误
- f# - FSharp.Data JsonProvider 的重命名类型