Пользовательская проверка Laravel: проверять ввод только в том случае, если введен ввод

Поэтому я следовал этому руководству, чтобы узнать, как загружать изображения в Laravel с помощью Vue: Загрузка и проверка изображения с помощью Laravel и VueJs

Все работает нормально, но я хочу сделать загрузку изображения необязательной. Теперь пользовательская проверка не выполняется для файла AppServiceProvider. если у него нет ввода, я получаю эту ошибку

попытка доступа к атрибуту внутри несуществующего массива. Неопределенное смещение: 1

Я мог бы избежать ошибки, спросив

if (request('image'))

В контроллере и применяя проверку для других полей, только если изображение не указано. Однако это становится невероятно грязным.

Поэтому я ищу способ заставить работать пользовательское правило проверки, если нет ввода. Или это неправильный путь?

Вот пользовательское правило проверки:

public function boot()
{
    Validator::extend('image64', function ($attribute, $value, $parameters, $validator) {
        $type = explode('/', explode(':', substr($value, 0, strpos($value, ';')))[1])[1];
        if (in_array($type, $parameters)) {
            return true;
        }
        return false;
    });

    Validator::replacer('image64', function($message, $attribute, $rule, $parameters) {
        return str_replace(':values',join(",",$parameters),$message);
    });
}

person Hillcow    schedule 28.07.2017    source источник


Ответы (2)


В некоторых ситуациях вы можете захотеть выполнить проверку поля только в том случае, если это поле присутствует во входном массиве. Чтобы быстро выполнить это, добавьте правило sometimes в список правил:

$v = Validator::make($data, [
    'email' => 'sometimes|required|email',
]);

В приведенном выше примере поле электронной почты будет проверено только в том случае, если оно присутствует в массиве $data.

Ссылка: Условное добавление правил

person Zayn Ali    schedule 29.07.2017
comment
Отличная идея. Однако я нашел это: laravel.com/docs/5.4/ validation#a-note-on- optional-fields Теперь проблема в том, что это не работает. изображение «нулевое», но оно все еще дает мне ошибку другого правила проверки. - person Hillcow; 29.07.2017

Laravel предоставляет валидацию под названием «nullable» на случай, если другие правила валидации не должны выполняться, если заданное значение равно null: Примечание о необязательных полях

person Hillcow    schedule 29.07.2017