Я новичок в Laravel и React, и, похоже, у меня проблема.

У меня есть форма, в которой состояние ввода инициализируется этими значениями

const empty = {
    name: '',
    email: '',
    phone: '',
    topic: '',
    message: '',
};

const [input, setInput] = useState(empty);

const handleChange = (e) => setInput({
    ...input,
    [e.currentTarget.name]: e.currentTarget.value
});

<input 
    name="phone" 
    type="text" 
    className={ input_classes }
    onChange={ handleChange }
    value={ input.phone }
/>
{
  errors.phone !== null &&
  <InputError message={ errors.phone } />
}

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

    request()->validate([
        'name' => 'bail|required|max:255',
        'email' => 'bail|required|email',
        'phone' => 'numeric',
        'topic' => 'bail|required|max:255',
        'message' => 'required',
    ]);

Отправка формы со всеми, кроме введенного телефона, приводит к тому, что сервер отправляет 422 с сообщением об ошибке, что телефон должен быть числовым. Я понимаю, что это связано с инициализацией состояния ввода как ''.

Я неправильно обрабатываю это на стороне реакции? попытка инициализировать состояние значениями undefined или null не увенчалась успехом.

0
Newb 4 You BB 21 Фев 2021 в 23:41

1 ответ

Лучший ответ

Что ж, вы также должны объявить свое правило как nullable.

https://laravel.com/docs/8.x/validation#rule-nullable

Итак, в основном:

'phone' => 'numeric|nullable',
0
Emanuele Scarabattoli 21 Фев 2021 в 20:56