在验证规则中使用多个required_if

时间:2014-03-11 21:25:53

标签: php validation laravel

我有一个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>

当用户选择选项a,b或f时,我希望第二个select是必需的。在控制器代码中使用验证输入的下一个规则是否正确?:

    $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'
    );

是否有(另一种或更好的)验证方法?

2 个答案:

答案 0 :(得分:25)

或者,您可以像这样使用它。

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

Laravel将除第一个参数之外的所有参数作为数组,然后使用in_array方法检查第一个参数的值是否与其余参数匹配。

答案 1 :(得分: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 Website