如何在Laravel验证日期时间数组?



我有一个表单,它提交了一个名为prazos的数组,我想确保每个项都是有效的日期时间或null。根据这个问题的答案和Laravel文档,我在我的控制器中有这个:

use IlluminateSupportFacadesValidator;
// ...
$rules = array([
'prazos' => 'required|array',
'prazos.*' => 'nullable|date'
]);
$validator = Validator::make($request->all(), $rules);
$data = $validator->valid()['prazos'];
foreach($data as $id => $prazo) {
// use $data to update my database
// ...
}

问题是,验证器实际上并没有停止无效的内容。如果我想提交& loldasxyz"或其他胡言乱语,我从数据库得到一个错误。我做错了什么?

注意:以前我一直在使用语法$data = $request->validate($rules)的验证器,但由于某种原因,它对数组类型的数据不起作用($data返回空)。我不确定这些不同的方法的工作方式是否有一些不同。

编辑:这就是我测试$request中的参数包的样子(索引是id,这就是为什么它们从1开始):

#parameters: array:3 [▼
"_token" => "Rf6mAp4lqhpZzQRxaxYsees1M0NfrFKpbGe4Hy28"
"_method" => "PUT"
"prazos" => array:5 [▼
1 => "2021-03-22 21:21"
2 => "2021-03-03 11:27"
3 => "jhbkjhg"
4 => null
5 => "2021-03-02 14:21"
]
]

验证后的$data是这样的:

array:5 [▼
1 => "2021-03-22 21:21"
2 => "2021-03-03 11:27"
3 => "jhbkjhg"
4 => null
5 => "2021-03-02 14:21"
]

我希望它能告诉我第三个值是无效的

你要找的是:https://laravel.com/docs/8.x/validation rule-date-equals

验证的字段必须等于给定的日期。日期将被传递到PHP的strtotime函数中,以便转换为有效的DateTime实例。

最新更新