Laravel - 在自定义验证中使用验证规则

Posted

技术标签:

【中文标题】Laravel - 在自定义验证中使用验证规则【英文标题】:Laravel - Use validation rule inside Custom Validation 【发布时间】:2014-04-22 01:31:37 【问题描述】:

我正在 Laravel 4 上编写自定义验证规则。但是,我期待在其中使用现有的验证规则(例如:exists、email、min 等)。我不确定如何做到这一点,我猜使用 Validator::make 并不是正确的方法。我的代码如下:

    Validator::extend('check_fulfilled',function($attribute,$value,$parameters)
        $movieidfield = Input::get('movieid');
                if(     empty($movieidfield )    ) return false;
                    // Here I would like to test $movieidfield 
                    //with exists and min validation rules 
    );

如果有人能帮我解决这个问题,那就太好了。谢谢!

【问题讨论】:

大概您可以在该函数中实例化您自己的验证器并使用它来测试手头的值? 谢谢,我该怎么做? 就像在控制器中一样使用验证器的正常方式。 $v = Validator::make() @SasankaPanguluri 回答了吗? 【参考方案1】:

Validation rules are composable.

像您这样的自定义验证规则不需要从输入参数包中获取值。 Validator class already takes care of that.

Validator::extend('check_fulfilled', function($attribute, $value, $parameters) 
    return !empty($value);
);

例如,要将您的自定义验证规则与您可以在实例化 Validator 实例时编写的其他现有规则一起使用:

$v = Validator::make($data, array(
     'movieid' => 'check_fulfilled|email',
));

除非您知道自己在做什么,否则您应该内联验证规则。

为此,您可以在ValidationServiceProvider 注册的应用服务容器中解析Validator 单例。

Validator::extend('check_fulfilled', function($attribute, $value, $parameters) 
    if (empty($movieidfield)) return false;
    $v = App::make('validator');

    return $v->validateExists($attribute, $value, $parameters) 
           && $v->validateEmail($attribute, $value);
);

请注意,$parameters 数组需要保存内联验证规则的值。

请参阅验证方法的签名以了解要传递的参数。

Validator::validateExists($attribute, $value, $parameters)

Validator::validateEmail($attribute, $value)

Validator::validateMin($attribute, $value, $parameters)

【讨论】:

以上是关于Laravel - 在自定义验证中使用验证规则的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 5 中使用表单请求验证时如何添加自定义验证规则

在 Laravel 中验证数组时,如何使用数组项规则添加验证自定义消息?

Laravel 验证:存在附加列条件 - 自定义验证规则

具有多个参数的 Laravel 自定义验证规则 [重复]

Laravel 自定义验证规则

自定义 Laravel 验证规则示例