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

Laravel: Sometimes rule not working on input type=file

我正在创建一个 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',
    ];
}

换句话说,上传文件的数组在设置时进行验证。我正在处理这个低谷 blade.

我的请求是通过 Jquery.ajax() 完成的,并使用 new FormData($('selector')[0]) 获取字段值。我的 ajax 参数正确,所以这不是问题。

问题是,在使用空白表单发出 HTTP 请求时,唯一被验证的是 usernamekeyg-recaptcha-response

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

原来问题是laravel有点忽略了空input[type=file]数组,没有把它添加到RequestClass的参数包中。我所做的解决方法是对数组项验证使用 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 数组

中更深入地验证