【问题标题】:Using multiple required_if in a validation rule在验证规则中使用多个 required_if
【发布时间】:2014-04-15 17:28:49
【问题描述】:

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

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

【问题讨论】:

  • 你想用那个数组做什么?
  • 不好意思,忘了说这是控制器代码里面的校验规则对应的数组。为此,我受到documentation on the Laravel site 的指导。

标签: php validation laravel


【解决方案1】:

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

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

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

【讨论】:

  • 是的。验证有效。但是对于 b 和 f 类别输入,错误消息始终是“类型为 a 时需要类别字段”
  • 是的。那是代码中的错误,为此我还向 Taylor 发送了一个拉取请求。这是拉取请求:https://github.com/laravel/framework/pull/5262。如果他快速合并它,错误将被解决。你可以在 github 上评论这个问题,以便他把这个请求放在一个好的优先级上。
  • 拉取请求现已合并。所以,也有更好的信息。
  • 另外,我们可以使用自定义错误信息:laravel.com/docs/5.1/validation#custom-error-messages
【解决方案2】:

您可以注册一个自定义验证规则来检查这一点,例如:

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

【讨论】:

  • 放置新验证规则的最佳位置是什么?我应该将它添加到源代码中的原始 Validator 类中吗?
  • 对于其他想知道的人来说,根据Laravel: Code Bright这本书,没有新规则的标准位置。另外,如果您无法访问这本书,请查看this post
  • 使用 MohitMamoria 的示例比编写新规则更可取,因为 OP 的问题不需要新规则。
猜你喜欢
  • 1970-01-01
  • 2019-03-21
  • 2018-11-05
  • 2020-05-25
  • 2022-01-20
  • 2017-07-08
  • 1970-01-01
  • 2017-06-13
  • 2019-08-04
相关资源
最近更新 更多