【发布时间】:2021-06-01 13:17:06
【问题描述】:
我有一个提交名为prazos 的数组的表单,我想确保每个项目都是有效的日期时间或空值。在the answers to this question 和Laravel docs 之后,我的控制器中有这个:
use Illuminate\Support\Facades\Validator;
// ...
$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"
]
我希望它会告诉我第三个值无效。
【问题讨论】:
-
添加您的请求,看看它是否以
prazos[0], prazos[1]或您的输入以其他格式出现,我认为您应该nullable而不是sometimes -
你是对的,因为没有缺失值,只有空值......完成。
标签: php laravel validation eloquent laravel-8