我正在创建一个FormRequest,它根据其字段名称来验证是否包含图像。以下是我的规则:
public function rules(){
return [
'username' => 'required|exists:users',
'key' => 'required|exists:users,activation_key',
'id' => 'sometimes|required|array|min:2',
'id.*' => 'sometimes|required|file|mimes:jpeg,jpg,png|max:5000',
'documents' => 'sometimes|required|array|min:4',
'documents.*' => 'sometimes|required|file|mimes:jpeg,jpg,png,doc,pdf,docx,zip|max:5000',
'g-recaptcha-response' => 'required',
];
}
换句话说,上载的文件阵列在设置后将得到验证。我正在处理此槽刀片。
我的请求通过Jquery.ajax()
完成,并使用new FormData($('selector')[0])
获取字段值。我的Ajax参数正确,所以没有这个必要。
问题是,在以空白格式发出HTTP请求时,唯一要验证的是username
,key
和g-recaptcha-response
进一步的调试显示,删除sometimes
规则使其可以工作。但是我只需要有条件地检查一个(例如/upload-id
仅显示id[]
字段,而/upload-documents
仅显示document[]
字段)。
答案 0 :(得分:0)
事实证明,问题是laravel在某种程度上忽略了空的input[type=file]
数组,并且没有将其添加到Request
类的参数包中。我所做的解决方法是在数组项验证中使用required_if
规则,如下所示:
public function rules(){
return [
'username' => 'required|exists:users',
'key' => 'required|exists:users,activation_key',
'account_type' => ['required', Rule::in(['individual', 'business'])],
'id' => 'nullable|array|min:2',
'id.*' => 'required_if:account_type,individual|file|mimes:jpeg,jpg,png|max:5000',
'documents' => 'nullable|array|min:4',
'documents.*' => 'required_if:account_type,business|file|mimes:jpeg,jpg,png,doc,pdf,docx,zip|max:5000',
'g-recaptcha-response' => 'required'
];
}
在这里,我有一个行列式,确定将在这两个行之间进行验证,因此如果使用account_type = individal
,它将仅在id
数组中进行更深入的验证