Laravel: проверять ввод, только если он доступен в DOM - PullRequest
0 голосов
/ 20 декабря 2018

Я создал форму со следующими полями:

  • Имя
  • Электронная почта
  • Страна
  • Город
  • Адрес

Если пользователь выбирает страну со штатами (например, США), то форма преобразуется в:

  • Имя
  • Электронная почта
  • Страна
  • Штат
  • Город
  • Адрес

Чтобы проверить это, я создал отдельный запрос формы, например:

public function rules()
{
    return [
      'name' => 'required|max:255',
      'email' => 'required|email,
      'country_id' => 'required|integer',
      'state_id' => 'nullable|integer',
      'city_id' => 'required|integer',
      'address' => 'required',
    ];
}

Проблема в том, что если я оставлю это так, то, если я не выберу состояние, оно пройдет проверку.

Если я сделаю это:

'state_id' => 'sometimes|nullable|integer',

Затем он снова проходит проверку.

Если я сделаю это:

'state_id' => 'required|nullable|integer',

Он не пройдет проверку, но затем снова выдаст ошибку проверки, если в форме нет поля состояния..

Я прочитал много статей на эту тему, но, похоже, ничего не решило для меня.

PS1 : Я хочу решить это в форме запроса, а не в контроллере.Я предполагаю, что

if($request->has('states')){...}

может помочь, но опять же, я хотел бы сохранить все в порядке в запросе формы.

PS2 : я использую VueJSи Axios для добавления / удаления состояний из формы.Вся форма на самом деле является компонентом Vue.

Есть какие-нибудь подсказки?

Заранее спасибо!

1 Ответ

0 голосов
/ 20 декабря 2018

Вы можете условно добавить правила с помощью метода sometimes для Validator.

$v->sometimes('state_id', 'required|integer', function ($input) {
    return in_array($input->countries, [1,2,3,4...]
});

Вы можете использовать строку параметров required_with, но поскольку проверка основана на значенииввод, а не только присутствие, пользовательское правило проверки, вероятно, будет лучшим выбором.

За https://laravel.com/docs/5.7/validation#conditionally-adding-rules

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...