【问题标题】:Error when trying to extend validator in Laravel尝试在 Laravel 中扩展验证器时出错
【发布时间】:2016-01-04 15:23:12
【问题描述】:

我一直在 Laravel 中对我的表单使用以下验证:

public function isValid($data, $rules)
    {
        $validation = Validator::make($data, $rules);

        if($validation->passes()){
            return true;
        }

        $this->messages = $validation->messages();

        return false;
    }

传递给它的规则很简单:

$rules = [
            'name' => 'required',
            'type' => 'required'
        ];

$data 是输入的帖子数据。现在我需要为此添加一个自定义验证扩展,特别是要确保输入字段round2 的值大于输入字段round1 的值。查看文档,我尝试了以下我认为应该正确的语法,但我一直收到错误。

        $validation->extend('manual_capture', function($attribute, $value, $parameters)
        {
            return $value > $parameters[0];
        });

然后我可以用$attribute = 'round1'$value = $data['round1']$parameters = [$data['round2']] 调用它。

错误是Method [extend] does not exist. - 我不确定我对整个概念的理解是否正确,那么有人可以告诉我如何让它发挥作用吗?文档只有大约 2 段关于此的内容。

【问题讨论】:

标签: php validation laravel laravel-4


【解决方案1】:

将以下内容放入您的 route.php

Validator::extend('manual_capture', function($attribute, $value, $parameters)
{
    return $value > $parameters[0];
});

其他文档here

然后像这样使用它:

$rules = [ 'foo' => 'manual_capture:30'];

【讨论】:

  • 我知道,但是如何将它附加到我的 $validation 变量中?这才是真正的问题。当我这样做时,没有错误,但它也不会验证 round1/round2 关系。
  • 你是说怎么用?
  • 是的,我想归根结底。我正在查看文档,但看不到如何将此自定义规则添加到现有的 $validation
  • 我看到了您所做的编辑 - 抱歉,您能再澄清一下吗?如何传递参数?在您的示例中,“30”是什么?这行规则应该以某种方式传递给它的三件事:要验证的字段、它的值和另一个字段的值,以便我们可以比较它们。
  • 我在这里尝试验证的字段称为foo,它的值通过$value 作为参数自动传递给验证规则。我试图与foo 比较的值作为数组通过参数传递,在我的示例中为30
猜你喜欢
  • 1970-01-01
  • 2023-03-04
  • 2019-10-01
  • 2014-11-06
  • 1970-01-01
  • 2014-01-11
  • 1970-01-01
  • 2021-06-07
  • 1970-01-01
相关资源
最近更新 更多