【问题标题】:How to validate without request in Laravel如何在 Laravel 中无需请求进行验证
【发布时间】:2018-09-24 09:47:35
【问题描述】:

我需要验证一个数组但没有请求。 在 laravel 文档中验证是这样描述的:

$validator = Validator::make($request->all(), [
    'title' => 'required|unique:posts|max:255',
    'body' => 'required',
]);

但我不能使用 $request,因为数据来自外部 api,并且验证不在控制器内部。我怎样才能验证这个数组?例如:

$validatedData = validate([
    'id' => 1,
    'body' => 'text'
], [
    'id' => 'required',
    'body' => 'required'
]);

【问题讨论】:

    标签: php laravel laravel-5.6


    【解决方案1】:

    应该是。因为$request->all() 将所有输入数据保存为一个数组。

    $input = [
        'title' => 'testTitle',
        'body' => 'text'
    ];
    
    
    $input is your customs array.
    
    $validator = Validator::make($input, [
        'title' => 'required|unique:posts|max:255',
        'body' => 'required',
    ]);
    

    【讨论】:

      【解决方案2】:

      您可以通过像这样创建请求对象来实现这一点:

      $request = new Request([
          'id' => 1,
          'body' => 'text'
      ]);
      
      $this->validate($request, [
          'id' => 'required',
          'body' => 'required'
      ]);
      

      因此您将获得 Request 类的所有功能

      【讨论】:

      • 你不需要请求对象来验证数组。
      • 至少在Lumen中,它必须是一个Request对象。 Laravel\\Lumen\\Routing\\Controller::validate(): Argument #1 ($request) must be of type Illuminate\\Http\\Request, array given
      【解决方案3】:

      Validator::make 需要数组而不是请求对象。 您可以传递任何数组并在其上实现规则。

      Validator::make(['name' => 'Tom'], ['name' => 'required', 'id' => 'required']);
      

      它会验证数组。所以 $request 对象不是必需的。

      【讨论】:

      • 很好的答案!很遗憾看到人们使用黑客来“修复”他们的代码。
      • 这应该是真正的答案
      【解决方案4】:

      您还可以将数据与请求对象合并:

      $data = ['id' => 1];
      $request->merge($data);
      

      然后照常进行验证。

      【讨论】:

        【解决方案5】:

        $request->all() 是数组而不是请求对象。 此代码将起作用:

        $data = [
            'id' => 1,
            'body' => 'text'
        ];
        
        $validator = Validator::make($data, [
            'id' => 'required',
            'body' => 'required',
        ]);
        

        【讨论】:

          猜你喜欢
          • 2017-01-19
          • 1970-01-01
          • 2017-08-28
          • 1970-01-01
          • 2016-03-28
          • 1970-01-01
          • 1970-01-01
          • 2020-11-12
          • 2017-11-21
          相关资源
          最近更新 更多