Laravel: Иногда правило не работает с типом ввода = файл - PullRequest
0 голосов
/ 20 сентября 2018

Я создаю 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, keyg-recaptcha-response

Дальнейшая отладка показывает, что удаление правила sometimes заставляет его работать.Но мне нужно только условно проверить одно (например, /upload-id покажет только id[] поля и /upload-documents покажет только document[] поля).

1 Ответ

0 голосов
/ 25 сентября 2018

Оказывается, что проблема заключается в том, что проблема несколько игнорирует пустые массивы 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

...