Laravel: иногда правило не работает с типом ввода = файл
Я создаю 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[]
поля).
1 ответ
Оказывается, проблема заключается в том, что она несколько игнорирует пустую 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
массив