我有一个表单,它提交了一个名为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实例。