Laravel:有时规则不适用于输入类型=文件

时间:2018-09-20 20:02:20

标签: jquery ajax validation laravel-5 form-data

我正在创建一个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请求时,唯一要验证的是usernamekeyg-recaptcha-response

进一步的调试显示,删除sometimes规则使其可以工作。但是我只需要有条件地检查一个(例如/upload-id仅显示id[]字段,而/upload-documents仅显示document[]字段)。

1 个答案:

答案 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数组中进行更深入的验证