如何在Laravel中验证GET请求的输入

sqougxex  于 2023-03-31  发布在  其他
关注(0)|答案(4)|浏览(157)

我想验证来自GET请求的输入,而不使用
this-〉validate($request... or \Validator::make($request...
而且更喜欢
$input = $request-〉validate([……rules……]);
然而,由于getRequests没有$request参数,我如何实现它?

public function sampleGet($param1, $param2) {

     // How can I pass the $param1 and $param to to validate?
     $input = $request->validate([
         'param1' => 'required',
         'param2' => 'required  
     ]);
}
mwkjh3gx

mwkjh3gx1#

您可以这样做,它将具有与validate相同的行为

validator($request->route()->parameters(), [

    'param1' => 'required',
    'param2' => 'required'
    ....

])->validate();
jyztefdp

jyztefdp2#

如果你想要所有的路由参数,你可以把它们作为一个数组:

$request->route()->parameters()

因为你已经有了这些参数传递给你的方法,你可以用它们构建一个数组:

compact('param1', 'param2');
// or
['param1' => $param1, 'param2' => $param2];

不过,你不会在Request上使用validate方法,你必须手动创建一个验证器。除非你想将这个数组合并到请求中,或者用这些作为输入创建一个新的请求。
Controller或Request上的validate方法没有什么特别之处,它们都是以与您自己相同的方式创建验证器并验证数据。
当手动创建一个验证器时,你仍然有一个validate方法会抛出一个异常,这相当于Request和Controller的validate方法发生的情况。
Laravel 7.x文档-验证-手动创建验证器-自动重定向

iibxawm4

iibxawm43#

你可以这样做。

public function getData(Request $request)
{
  try {
       $input['route1'] = $request->route('route1');
       $input['route2'] = $request->route('route2');
       $valid = Validator::make($input, [
            'route1' => 'required',
            'route2' => 'required'
         ]);
  } catch (\Throwable $th) {
    echo "<pre>";print_r($th->__toString());die;
  }
}

或者您可以点击下面的链接获取更多信息。
https://laravel.com/docs/7.x/validation#manually-creating-validators

v09wglhw

v09wglhw4#

可以使用Validator类

use Illuminate\Support\Facades\Validator;
use Illuminate\Http\Request;

        $request = Request::capture();
        $validator = Validator::make($request->query(), [
            'name' => 'required|string|max:255',
            'email' => 'required|email|unique:users|max:255',
        ]);
        if ($validator->fails()) {
            // Do something with the failed validation
            dd("test");
        }

相关问题