首页 > 解决方案 > Laravel - 在控制器内部验证而不进行 CustomRequest

问题描述

我想验证我通过路由传递给我的控制器的 get 参数。

api/路由

获取 /order/{id} -> OrderController::order

public function order($id) {
 // validation here (rules= require,between 1 and 1000)
  return Order::find($id);
}
  1. 如何在不创建单独的请求类的情况下在控制器内部进行验证?
  2. 我必须导入哪个验证类?(这个: Illuminate\Support\Facades\Validator ?)
  3. 这是一个好的或常见的解决方案吗?

标签: phplaravelvalidation

解决方案


$id始终存在,因此required验证始终通过。所以你只需要检查between 1 and 1000条件。我认为在路由中使用正则表达式约束是一个好主意。

Route::get('/order/{id}','OrderController@order')
    ->where(['id'=> '1000|^[1-9]{0,2}[1-9]$']);

如果id小于 1 或大于 1000 或任何其他随机字符串,它将与路由不匹配,如果也没有任何其他匹配路由,则会给出 404 错误。

如果你真的想验证控制器中的路由参数,你可以使用这个:

$validator = \Illuminate\Support\Facades\Validator::make(['id' => $id],
    [
        'id' => 'required|integer|between:1,1000'
    ]
);
$validator->validate();

推荐阅读