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)
不是最优雅的解决方案,但它解决了您的问题......
我可以在 laravel 6 中通过 App\Http\Requests CustomRequestClass 执行此操作,如下所示
public function rules()
{
return [
'*.name' => 'required',
'*.tag' => 'required'
];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5405 次 |
| 最近记录: |