Использование нескольких required_if в правиле проверки

6

У меня есть select со многими параметрами, я хочу, чтобы другой select требовался, когда первый имеет определенное значение.

    <select id="category" name="category">
            <option value="a">Option A</option>
            <option value="b">Option B</option>
            <option value="c">Option C</option>
            <option value="d">Option D</option>
            <option value="e">Option E</option>
            <option value="f">Option F</option>
    </select>

    <select id="subcategory" name="subcategory">
            <option value="a">Suboption A </option>
            <option value="b">Suboption B </option>
            <option value="c">Suboption C </option>
            <option value="d">Suboption D </option>
            <option value="e">Suboption E </option>
    </select>

Я хочу, чтобы второй select требовался, когда пользователь выбирает опцию a, b или f. Правильно ли использовать следующее правило в коде контроллера, который проверяет входные данные?:

    $rules = array(
            'category' => 'alpha|in:a,b,c,d,e,f|required|size:1',
            'subcategory' => 'alpha|
                              in:a,b,f|
                              required_if:category,a|
                              required_if:category,b|
                              required_if:category,f|
                              size:1'
    );

Есть ли (другой или) лучший способ проверить это?

  • 0
    Что вы пытаетесь сделать с этим массивом?
  • 0
    Извините, забыл упомянуть, что это массив, соответствующий правилам валидации внутри кода контроллера. Для этого я руководствовался документацией на сайте Laravel .
Теги:
validation

2 ответа

1
Лучший ответ

Вы можете зарегистрировать собственное правило проверки, чтобы проверить это, например:

Validator::extend('required_if_anyOfThese', function($attribute, $value, $parameters)
{
    // Check here whether any of those Inputs are available and make sure
    // what to do, return true or false depending on the result

    $attribute is field name "subcategory"
    $value will contain the value of the field
    $parameters will contain the parameters, array => a,b,f

});

Используйте его как:

$rules = array('subcategory' => 'required_if_anyOfThese:a,b,f');

Подробнее о Веб-сайт Laravel.

  • 0
    Какое лучшее место, чтобы поставить новое правило проверки? Должен ли я добавить это к исходному классу Validator в исходном коде?
  • 0
    Для других людей, которые хотят знать, согласно книге Laravel: Code Bright , не существует стандартного места для новых правил. Также, если вы не можете получить доступ к книге, проверьте этот пост .
Показать ещё 1 комментарий
23

Или вы можете просто использовать его так.

$rules = array('subcategory' => 'required_if:category,a,b,f');

Laravel принимает все параметры, кроме первого, как массив, а затем проверяет, совпадает ли значение первого параметра с остальными параметрами с помощью метода in_array.

  • 0
    да. Проверка работает. Но сообщение об ошибке всегда "Поле категории обязательно, когда тип является" для входов категории b и f
  • 0
    Да. Это ошибка в коде, для которой я также давно отправил запрос на получение Тейлору. Вот запрос на извлечение: https://github.com/laravel/framework/pull/5262 . Если он объединит это быстро, ошибка будет решена. Вы можете прокомментировать проблему на github, чтобы он отнес этот запрос к небольшому хорошему приоритету.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню