首页 > 解决方案 > 仅加载具有现有参数的路线

问题描述

我在做一个粗略的事情,我想使用 id 显示项目数据,我在 web.php 中有这个:

Route::get('update/{id}', 'CrudController@update');

如何拒绝用户将路径中的 ID 更改为不存在的 ID?那只显示那些存在的和那些不存在的,不加载的?

标签: laravelroutesprotection

解决方案


在您的更新方法中,您可以执行以下操作:

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 foundlaravel 的默认页面,这是一个合适的做法。


推荐阅读