【问题标题】:How to make a field required Laravel Validation?如何使字段需要 Laravel 验证?
【发布时间】:2017-11-19 09:29:36
【问题描述】:

我的表单上有一堆输入,并且正在考虑的字段具有各种验证要求。为了简化,我做了一个类比:

我有输入 A、B、C 和 D。A、B 和 C 都是数组输入。如果存在 B 和 C,则应该需要“A”,但如果输入“D”的值为 1,即使存在 B 和 C,也不需要。输入“B”和“C”的要求相同。

我最初的猜测是:A.* => 'required_with:B.,C. | required_if:D,0' 但这并没有真正起作用。

我不擅长自定义验证,所以如果需要自定义验证器的分步方法,能否提供完整代码?

谢谢!

【问题讨论】:

    标签: laravel validation laravel-5


    【解决方案1】:

    记录在https://laravel.com/docs/5.4/validation#conditionally-adding-rules

    存在时验证

    在某些情况下,您可能希望仅当输入数组中存在该字段时才对该字段运行验证检查。要快速完成此操作,请将有时规则添加到您的规则列表中:

    $v = Validator::make($data, [
        'email' => 'sometimes|required|email',
    ]);
    

    在上面的示例中,电子邮件字段只有在 $data 数组中存在时才会被验证。

    复杂的条件验证

    有时您可能希望根据更复杂的条件逻辑添加验证规则。例如,您可能希望仅当另一个字段的值大于 100 时才需要给定字段。或者,您可能需要两个字段才能仅在另一个字段存在时才具有给定值。添加这些验证规则并不一定很痛苦。首先,使用永远不会改变的静态规则创建一个 Validator 实例:

    $v = Validator::make($data, [
        'email' => 'required|email',
        'games' => 'required|numeric',
    ]);
    

    假设我们的网络应用程序是为游戏收藏者准备的。如果游戏收藏家在我们的应用程序中注册并且他们拥有超过 100 款游戏,我们希望他们解释为什么他们拥有这么多游戏。例如,他们可能经营一家游戏转售店,或者他们只是喜欢收集。要有条件地添加此要求,我们可以在 Validator 实例上使用有时方法。

    $v->sometimes('reason', 'required|max:500', function ($input) {
        return $input->games >= 100;
    });
    

    【讨论】:

    • 这样也行:$v = Validator::make($data, [ ]); //no rules provided$v->sometimes('A', 'required', function($input){ if ($input->D==1){ return false; }; if (($input->B !=null) || ($input->C !=null)){ return true; }; });
    • 最简单的找出方法是测试:)
    猜你喜欢
    • 2016-12-18
    • 2018-03-29
    • 2014-06-17
    • 2019-05-18
    • 2017-06-07
    • 2015-08-18
    • 1970-01-01
    • 2020-08-20
    • 2021-10-01
    相关资源
    最近更新 更多