laravel 仅加载具有现有参数的路由

baubqpgj  于 2023-05-01  发布在  其他
关注(0)|答案(1)|浏览(99)

我正在做一个crud,我想用id显示项目数据,我在web中有这个。php:

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

我怎么能否认用户将路径中的id更改为不存在的id?只显示存在的和不存在的,不加载的?

cbeh67ev

cbeh67ev1#

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

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

如果请求的$id不存在,则会抛出404响应。
然后,如果需要,可以在app\Exceptions\Handler.phprender()方法中捕获它:

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)方法将用户带到laravel的默认Page not found页面,这是一个合适的做法。

相关问题