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 请求时,唯一被验证的是 username
、key
和 g-recaptcha-response
进一步的调试表明,删除 sometimes
规则可以使其正常工作。但我只需要有条件地检查一个(例如 /upload-id
只会显示 id[]
字段,而 /upload-documents
只会显示 document[]
字段。
原来问题是laravel有点忽略了空input[type=file]
数组,没有把它添加到Request
Class的参数包中。我所做的解决方法是对数组项验证使用 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
数组
中更深入地验证
我正在创建一个 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 请求时,唯一被验证的是 username
、key
和 g-recaptcha-response
进一步的调试表明,删除 sometimes
规则可以使其正常工作。但我只需要有条件地检查一个(例如 /upload-id
只会显示 id[]
字段,而 /upload-documents
只会显示 document[]
字段。
原来问题是laravel有点忽略了空input[type=file]
数组,没有把它添加到Request
Class的参数包中。我所做的解决方法是对数组项验证使用 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
数组