仅加载具有参数的路线

时间:2019-01-24 00:01:24

标签: laravel routes protection

我在做杂事,我想使用id显示项目数据,我在web.php中有此内容:

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

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

1 个答案:

答案 0 :(得分:0)

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

public function update($id)
{
    MyModel::findOrFail($id);
    //...perform other actions
}

如果请求的$id不存在,它将抛出404响应。

然后您可以根据需要在render()的{​​{1}}方法中捕获它:

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 } 方法将用户带到laravel的默认abort(404)页面,这是适当的做法。