codecamp

自定义验证规则

注册自定义验证规则

Laravel 提供了各种有用的验证规则,但是,您可能希望可以设定自定义验证规则。注册生成自定义的验证规则的方法之一就是使用 Validator::extend 方法:

Validator::extend('foo', function($attribute, $value, $parameters)
{
    return $value == 'foo';
});

自定义验证器闭包接收三个参数:要被验证的 $attribute(属性) 的名称,属性的值 $value,传递至验证规则的 $parameters 数组。

您同样可以传递一个类和方法到 extend 方法中,取代原本的闭包:

Validator::extend('foo', 'FooValidator@validate');

注意,您同时需要为您的自定义规则制订一个错误信息。您可以使用行内自定义信息数组或是在认证语言文件里新增。
扩展 Validator 类

除了使用闭包回调来扩展 Validator 外,您一样可以直接扩展 Validator 类。您可以写一个扩展自 Illuminate\Validation\Validator 的验证器类。您也可以增加验证方法到以 validate为开头的类中:

<?php

class CustomValidator extends Illuminate\Validation\Validator {

    public function validateFoo($attribute, $value, $parameters)
    {
        return $value == 'foo';
    }

}

拓展自定义验证器解析器

接下来,您需要注册您自定义验证器扩展:

Validator::resolver(function($translator, $data, $rules, $messages)
{
    return new CustomValidator($translator, $data, $rules, $messages);
});

当创建自定义验证规则时,您可能有时需要为错误信息定义自定义的占位符。您可以如上所述创建一个自定义的验证器,然后增加 replaceXXX 函数进验证器中。

protected function replaceFoo($message, $attribute, $rule, $parameters)
{
    return str_replace(':foo', $parameters[0], $message);
}

如果您想要增加一个自定义信息 "replacer" 但不扩展 Validator类,您可以使用 Validator::replacer 方法:

Validator::replacer('rule', function($message, $attribute, $rule, $parameters)
{
    //
});
自定义错误信息
使用基础
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

环境配置

系统服务

哈希

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }