У меня есть 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'
);
Есть ли (другой или) лучший способ проверить это?
Вы можете зарегистрировать собственное правило проверки, чтобы проверить это, например:
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.
Или вы можете просто использовать его так.
$rules = array('subcategory' => 'required_if:category,a,b,f');
Laravel принимает все параметры, кроме первого, как массив, а затем проверяет, совпадает ли значение первого параметра с остальными параметрами с помощью метода in_array
.