【问题标题】:Laravel Form Validation, fail if not emptyLaravel 表单验证,如果不为空则失败
【发布时间】:2014-08-17 21:21:08
【问题描述】:

我有一个需要为空的输入字段,否则我希望验证失败。这是通过联系表单阻止垃圾邮件的尝试。

我查看了验证文档,但除了“max”规则外,没有什么可以做的,但这不起作用。

还有其他选择吗?

【问题讨论】:

    标签: php validation laravel


    【解决方案1】:

    在您进行验证的方法中,扩展/添加自定义规则:

    Validator::extend('mustBeEmpty', function($attr, $value, $params){
        if(!empty($attr)) return false;
        return true;
    });
    

    那么你可以使用这个rule like:

    protected $rules = array(
        'emptyInputField' => 'mustBeEmpty'
    );
    

    然后一切照常,只需使用:

    $v = Validator::make(Input::except('_token'), $rules);
    if($v->passes()) {
        // Passed, means that the emptyInputField is empty
    }
    

    还有其他方法可以做到这一点,而无需像这样扩展它或扩展Validator 类,但这是一种简单的Laravelish 方法。顺便说一句,Github 上有一个可用的包作为Honeypot spam prevention for Laravel applications,你可以检查一下。

    【讨论】:

    • 我尝试了建议的“蜜罐垃圾邮件预防”,它有你需要的一切。 ;-)
    【解决方案2】:

    您可以使用 empty 规则。详情可以看这里:https://laravel.com/docs/5.2/validation#conditionally-adding-rules

    【讨论】:

    • 鼓励链接到外部资源,但请在链接周围添加上下文,以便您的其他用户了解它是什么以及为什么存在。始终引用重要链接中最相关的部分,以防目标站点无法访问或永久离线。
    【解决方案3】:

    这是一个干净且(可能)防弹的解决方案:

        'mustBeEmpty'  => 'present|max:0',
    

    【讨论】:

      【解决方案4】:

      在 laravel 5.8 中,您可以使用 sometimes 来添加条件规则。 'email' => 'sometimes|email' 。如果输入字段中存在某些内容,则将应用此规则。

      【讨论】:

      • 这不是 OP 要求的......该字段始终必须为空......
      【解决方案5】:

      对于 Laravel 8.x 及更高版本,您可以使用prohibited 验证规则:

      return [
         'emptyInputField' => 'prohibited',
      ];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-22
        • 1970-01-01
        • 2013-04-15
        • 2016-12-18
        相关资源
        最近更新 更多