Laravel验证对象json的数组

Iri*_*dul 5 arrays api validation json laravel-5

我在Laravel 5.5 API上有一个POST端点,我用邮递员来测试我的路线,这就是问题所在.我想发送一个相同类型的对象的数组,如下所示:

[
  { 
   "name":"test",
   "tag":"TEST"
  },
  {
   "name":"test2",
   "tag":"TEST_2"
  }
]
Run Code Online (Sandbox Code Playgroud)

但我无法正确验证它.

在我的控制器中,我有这个:

$validator = Validator::make($requests->all(), [

   'name' => 'required|string',
   'tag' => 'required|string'
]);

if($validator->fails()) 
   //Warn user for errors 
Run Code Online (Sandbox Code Playgroud)

我也尝试过简单

$this->validate($requests->all() .... )
Run Code Online (Sandbox Code Playgroud)

我试图重新命名规则'.name''*.name',但没有成功.

我试图替换$request->all()$request->input(),但没有成功.

我也试图循环它,但我得到例外

foreach($request as $req){

  $validator = Validator::make($req ....) 

  //rest of the code
}
Run Code Online (Sandbox Code Playgroud)

另一方面,我可以检索这样的数据$datas = $request->all()并存储它们,但没有验证.

似乎唯一有效的解决方案是命名我的数组:

{
 "data" : [
      { 
       "name":"test",
       "tag":"TEST"
      },
      {
       "name":"test2",
       "tag":"TEST_2"
      }
    ]
}
Run Code Online (Sandbox Code Playgroud)

然后命名规则,'data.*.name'但这需要API用户解析数组.假设我有一个$array我要存储的数组,我需要这样做

$arrayParsed = ['data' => $array]
Run Code Online (Sandbox Code Playgroud)

并调用API $arrayParsed,我认为这有点多余.

有没有更好的方法来处理这个问题?

Nir*_*hah 13

您可以先尝试绕过这个问题:

$data = [ 'data' => $requests->all() ];
Run Code Online (Sandbox Code Playgroud)

然后你可以使用你建议的规则:

$validator = Validator::make($data, [
   'data.*.name' => 'required|string',
   'data.*.' => 'required|string'
]);
Run Code Online (Sandbox Code Playgroud)

不是最优雅的解决方案,但它解决了您的问题......


K-A*_*lex 7

我可以在 laravel 6 中通过 App\Http\Requests CustomRequestClass 执行此操作,如下所示

public function rules()
{
    return [
        '*.name' => 'required',
        '*.tag' => 'required'
    ];
}
Run Code Online (Sandbox Code Playgroud)