• 基本用法
  • 处理错误消息
  • 错误消息和视图
  • 可用的验证规则
  • 有条件地添加规则
  • 自定义错误消息
  • 自定义验证规则

基本用法

Laravel提供了一个简单、方便的工具,用于验证数据并通过validation类检索验证错误消息。

基本验证示例
$validator = Validator::make(
array('name' => 'Dayle'),
array('name' => 'required|min:5')
);

传递给make方法的第一个参数是正在验证的数据。第二个参数是应该应用于数据的验证规则。

使用数组指定规则

可以使用“管道”字符或作为数组的单独元素来分隔多个规则。

$validator = Validator::make(
array('name' => 'Dayle'),
array('name' => array('required', 'min:5'))
);
验证多个字段
$validator = Validator::make(
array(
'name' => 'Dayle',
'password' => 'lamepassword',
'email' => 'email@example.com'
),
array(
'name' => 'required',
'password' => 'required|min:8',
'email' => 'required|email|unique:users'
)
);

创建验证程序实例后,可以使用fails(或passes)方法执行验证。

if ($validator->fails())
{
// 给定的数据未通过验证
}

如果验证失败,您可以从验证器检索错误消息。

$messages = $validator->messages();

您还可以访问一组失败的验证规则,而无需消息。为此,请使用失败的方法:

$failed = $validator->failed();
正在验证文件

Validator类提供了一些用于验证文件的规则,例如大小、mime和其他规则。在验证文件时,您可以简单地将它们与其他数据一起传递到验证器中。

处理错误消息

在对验证器实例调用了messages方法之后,您将收到一个MessageBag实例,该实例有各种方便的方法来处理错误消息。

检索字段的第一条错误消息
echo $messages->first('email');
检索字段的所有错误消息
foreach ($messages->get('email') as $message)
{
//
}
检索所有字段的所有错误消息
foreach ($messages->all() as $message)
{
//
}
确定字段是否存在消息
if ($messages->has('email'))
{
//
}
检索格式为的错误消息
echo $messages->first('email', '<p>:message</p>');

注意:默认情况下,消息使用与引导程序兼容的语法格式化。

检索格式为的所有错误消息
foreach ($messages->all('<li>:message</li>') as $message)
{
//
}

错误消息和视图

一旦执行了验证,就需要一种简单的方法将错误消息返回到视图中。这是laravel很方便处理的。以下列路线为例:

Route::get('register', function()
{
return View::make('user.register');
}); Route::post('register', function()
{
$rules = array(...); $validator = Validator::make(Input::all(), $rules); if ($validator->fails())
{
return Redirect::to('register')->withErrors($validator);
}
});

注意,当验证失败时,我们使用withErrors方法将验证程序实例传递给重定向。此方法将错误消息刷新到会话,以便在下次请求时可用。

但是,请注意,我们不必显式地将错误消息绑定到GET路由中的视图。这是因为Laravel将始终检查会话数据中的错误,并自动将它们绑定到视图(如果它们可用)。因此,需要注意的是,在您的所有视图中,每次请求时都会有一个$errors变量, 允许您方便地假设$errors变量始终是定义的并且可以安全地使用。$errors变量将是MessageBag的一个实例。

因此,重定向后,可以在视图中使用自动绑定的$errors变量:

<?php echo $errors->first('email'); ?>
命名错误包

如果在一个页面上有多个表单,您可能希望命名错误消息包。这将允许您检索特定表单的错误消息。只需将名称作为第二个参数传递给withErrors

return Redirect::to('register')->withErrors($validator, 'login');

然后,您可以从$errors变量访问命名的MessageBag实例:

<?php echo $errors->login->first('email'); ?>

可用的验证规则

以下是所有可用验证规则及其功能的列表:

  • Accepted
  • Active URL
  • After (Date)
  • Alpha
  • Alpha Dash
  • Alpha Numeric
  • Array
  • Before (Date)
  • Between
  • Boolean
  • Confirmed
  • Date
  • Date Format
  • Different
  • Digits
  • Digits Between
  • E-Mail
  • Exists (Database)
  • Image (File)
  • In
  • Integer
  • IP Address
  • Max
  • MIME Types
  • Min
  • Not In
  • Numeric
  • Regular Expression
  • Required
  • Required If
  • Required With
  • Required With All
  • Required Without
  • Required Without All
  • Same
  • Size
  • String
  • Timezone
  • Unique (Database)
  • URL
accepted

正在验证的字段必须是yes、on或1。这对于验证“服务条款”接受是有用的。

active_url

根据checkdnsrr PHP函数,正在验证的字段必须是有效的URL。

after:date

正在验证的字段必须是给定日期之后的值。日期将传递到PHP strtotime函数中。

alpha

正在验证的字段必须完全是字母字符。

alpha_dash

正在验证的字段可能包含字母数字字符以及破折号和下划线。

alpha_num

正在验证的字段必须完全是字母数字字符。

array

正在验证的字段必须是数组类型。

before:date

正在验证的字段必须是给定日期之前的值。日期将传递到PHP strtotime函数中。

between:min,max

正在验证的字段的大小必须介于给定的最小值和最大值之间。字符串、数字和文件的计算方式与大小规则相同。

boolean

验证中的字段必须能够转换为布尔值。接受的输入为true、false、1、0、“1”和“0”。

confirmed

正在验证的字段必须有一个匹配的foo_confirmation字段。例如,如果正在验证的字段是password,则输入中必须存在匹配的password_confirmation字段。

date

根据strtotime PHP函数,正在验证的字段必须是有效日期。

date_format:format

正在验证的字段必须与根据date_parse_from_format PHP函数定义的格式匹配。

different:field

给定字段必须与正在验证的字段不同。

digits:value

正在验证的字段必须是数字,并且必须具有精确的值长度。

digits_between:min,max

正在验证的字段的长度必须介于给定的最小值和最大值之间。

email

正在验证的字段必须格式化为电子邮件地址。

exists:table,column

正在验证的字段必须存在于给定的数据库表中。

Basic Usage Of Exists Rule
'state' => 'exists:states'
Specifying A Custom Column Name
'state' => 'exists:states,abbreviation'

您还可以指定更多将添加为查询的“where”子句的条件:

'email' => 'exists:staff,email,account_id,1'

NULL作为“where”子句值传递将添加对空数据库值的检查:

'email' => 'exists:staff,email,deleted_at,NULL'
image

正在验证的文件必须是图像(jpeg、png、bmp或gif)

in:foo,bar,...

验证中的字段必须包含在给定的值列表中。

integer

正在验证的字段必须具有整数值。

ip

正在验证的字段必须格式化为IP地址。

max:value

验证中的字段必须小于或等于最大值。字符串、数字和文件的计算方式与大小规则相同。

mimes:foo,bar,...

正在验证的文件必须具有与列出的扩展名之一对应的MIME类型。

Basic Usage Of MIME Rule
'photo' => 'mimes:jpeg,bmp,png'
min:value

正在验证的字段必须具有最小值。字符串、数字和文件的计算方式与大小规则相同。

not_in:foo,bar,...

正在验证的字段不能包含在给定的值列表中。

numeric

正在验证的字段必须有一个数值。

regex:pattern

正在验证的字段必须与给定的正则表达式匹配。

注意:使用regex模式时,可能需要在数组中指定规则,而不是使用管道分隔符,特别是当正则表达式包含管道字符时。

required

输入数据中必须存在正在验证的字段。

required_if:field,value,...

如果字段字段等于任何值,则必须存在正在验证的字段。

required_with:foo,bar,...

只有当任何其他指定字段存在时,验证中的字段才必须存在。

required_with_all:foo,bar,...

只有当所有其他指定字段都存在时,验证中的字段才必须存在。

required_without:foo,bar,...

只有当其他指定字段不存在时,验证中的字段才必须存在。

required_without_all:foo,bar,...

只有当所有其他指定字段都不存在时,验证中的字段才必须存在。

same:field

给定字段必须与正在验证的字段匹配。

size:value

正在验证的字段必须具有与给定值匹配的大小。对于字符串数据,值对应于字符数。对于数字数据,值对应于给定的整数值。对于文件,大小对应于以千字节为单位的文件大小。

string:value

正在验证的字段必须是字符串类型。

timezone

根据时区标识符列表PHP函数,正在验证的字段必须是有效的时区标识符。

unique:table,column,except,idColumn

在给定的数据库表中,要验证的字段必须是唯一的。如果未指定column选项,则将使用字段名。

Basic Usage Of Unique Rule
'email' => 'unique:users'
Specifying A Custom Column Name
'email' => 'unique:users,email_address'
Forcing A Unique Rule To Ignore A Given ID
'email' => 'unique:users,email_address,10'
Adding Additional Where Clauses

您还可以指定更多将添加为查询的“where”子句的条件:

'email' => 'unique:users,email_address,NULL,id,account_id,1'

在上述规则中,只有帐户id为1的行才会包含在唯一检查中。

url

正在验证的字段必须格式化为URL。

注意:此函数使用PHP的filter was方法。

有条件地添加规则

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

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

在上面的示例中,只有当电子邮件字段出现在$data数组中时,才会对其进行验证。

复杂条件验证

有时,仅当另一个字段的值大于100时,才需要给定的字段。或者,只有当存在另一个字段时,才需要两个字段具有给定值。添加这些验证规则不一定很麻烦。首先,使用静态规则创建一个验证程序实例,这些规则永远不会更改:

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

假设我们的web应用程序是为游戏收藏者设计的。如果一个游戏收集器在我们的应用程序中注册,并且他们拥有100多个游戏,我们希望他们解释为什么他们拥有这么多游戏。例如,也许他们经营一家游戏转卖店,或者他们只是喜欢收藏。为了有条件地添加这个需求,我们可以在验证器实例上使用有时方法。

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

传递给有时方法的第一个参数是我们要条件验证的字段的名称。第二个参数是我们要添加的规则。如果作为第三个参数传递的闭包返回true,则将添加规则。这种方法使得建立复杂的条件验证变得轻而易举。您甚至可以同时为多个字段添加条件验证:

$v->sometimes(array('reason', 'cost'), 'required', function($input)
{
return $input->games >= 100;
});

注意:传递给闭包的$input参数将是Illuminate\Support\Fluent的实例,可以用作访问输入和文件的对象。

自定义错误消息

如果需要,可以使用自定义错误消息进行验证,而不是使用默认值。有几种方法可以指定自定义消息。

将自定义消息传递到验证器
$messages = array(
'required' => 'The :attribute field is required.',
); $validator = Validator::make($input, $rules, $messages);

注意:属性占位符将替换为被验证字段的实际名称。您还可以在验证消息中使用其他占位符。

其他验证场所持有人
$messages = array(
'same' => 'The :attribute and :other must match.',
'size' => 'The :attribute must be exactly :size.',
'between' => 'The :attribute must be between :min - :max.',
'in' => 'The :attribute must be one of the following types: :values',
);
为给定属性指定自定义消息

有时您可能希望仅为特定字段指定自定义错误消息:

$messages = array(
'email.required' => 'We need to know your e-mail address!',
);
在语言文件中指定自定义消息

在某些情况下,您可能希望在语言文件中指定自定义消息,而不是将它们直接传递给验证器。为此,请将消息添加到app/lang/xx/validation.php语言文件中的自定义数组中。

'custom' => array(
'email' => array(
'required' => 'We need to know your e-mail address!',
),
),

自定义验证规则

注册自定义验证规则

Laravel提供了各种有用的验证规则;但是,您可能希望指定一些自己的验证规则。注册自定义验证规则的一种方法是使用Validator::extend方法:

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

自定义验证器闭包接收三个参数:正在验证的$attribute的名称、属性的$value$param数组

您还可以将类和方法传递给扩展方法而不是闭包:

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

请注意,您还需要为自定义规则定义错误消息。可以使用内联自定义消息数组或通过在验证语言文件中添加条目来执行此操作。

扩展验证器类

与使用闭包回调来扩展验证器不同,您还可以扩展验证器类本身。为此,请编写一个扩展Illuminate\Validation\Validator的验证程序类。可以通过将验证方法添加到类中,然后用验证:

<?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)
{
//
});

laravel的Validation检索验证错误消息的更多相关文章

  1. Laravel 5.5 FormRequest 自定义错误消息 postman调试时X-Requested-With设为XMLHttpRequest

    Laravel 5.5 FormRequest 自定义错误消息 使用FormRequest进行表单验证,就不用让验证逻辑和控制器里面的逻辑都混在一起.但在使用的时候呢,发现json错误返回的数据,与我 ...

  2. [原创]java WEB学习笔记71:Struts2 学习之路-- struts2常见的内建验证程序及注意点,短路验证,非字段验证,错误消息的重用

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  3. java struts2入门学习---中文验证、对错误消息的分离、结果(result)类型细节配置

    一.需求 利用struts2实现中文验证并对错误消息的抽离. 详细需求:用户登录-->不填写用户名-->页面跳转到用户登录页面,提示用户名必填(以英文和中文两种方式提示)-->填写英 ...

  4. laravel的表单验证(下面有些信息未验证,转的)

    后台写法: 1.1类的方法 $rules = [ 'email'=>'required|between:4,20', 'password'=>'required|between:6,20' ...

  5. SpringMVC——类型转换和格式化、数据校验、客户端显示错误消息

    在介绍类型转换和格式化之前,我首先来介绍 <mvc:annotation-driven />. 需要导入的 schema: xmlns:mvc="http://www.sprin ...

  6. Go Revel - Validation(验证)

    Revel提供了内建函数用于验证参数.它提供了: 一个`Validation`上下文集合来管理验证错误信息(键与消息内容) 辅助函数用于检查数据并将错误信息放入上下文 一个模板函数用于从`Valida ...

  7. Yii 验证和消息

    setFlash(), getFlash()可以完成验证成功后提示 <?php # 成功信息提示 Yii::app()->user->setFlash('success', &quo ...

  8. 允许asp.net MVC报 错说明: 访问服务此请求所需的资源时出错。服务器可能未配置为访问所请求的 URL。错误消息 401.2。: 未经授权

    运行mvc3程序报以下错误 详细报错如下: “/”应用程序中的服务器错误. 访问被拒绝. 说明: 访问服务此请求所需的资源时出错.服务器可能未配置为访问所请求的 URL. 错误消息 401.2.: 未 ...

  9. "错误消息 401.2。: 未经授权: 服务器配置导致登录失败。"的解决办法

    [详细报错如下]: “/”应用程序中的服务器错误. 访问被拒绝. 说明: 访问服务此请求所需的资源时出错.服务器可能未配置为访问所请求的 URL. 错误消息 401.2.: 未经授权: 服务器配置导致 ...

随机推荐

  1. C#_Excel数据读取与写入_自定义解析封装类_支持设置标题行位置&使用excel表达式收集数据&单元格映射&标题映射&模板文件的参数数据替换

    本篇博客园是被任务所逼,而已有的使用nopi技术的文档技术经验又不支持我需要的应对各种复杂需求的苛刻要求,只能自己造轮子封装了,由于需要应对很多总类型的数据采集需求,因此有了本篇博客的代码封装,下面一 ...

  2. opencv —— HoughLines、HoughLinesP 霍夫线变换原理(标准霍夫线变换、多尺度霍夫线变换、累积概率霍夫线变换)及直线检测

    霍夫线变换的原理 一条直线在图像二维空间可由两个变量表示,有以下两种情况: ① 在笛卡尔坐标系中:可由参数斜率和截距(k,b)表示. ② 在极坐标系中:可由参数极经和极角(r,θ)表示. 对于霍夫线变 ...

  3. Hook 初学习

    Hook 概念 百度上的概念 每个Hook都有一个相关的指针列表,后加入的Hook再链表的开始,先加入的在链表的尾部 即后加入先获得控制权 Hook 原理 原本的流程 graph LR id1(Mes ...

  4. Ubuntu 系统连接到服务器

    Ubuntu 系统连接到服务器 我用的是 Ubuntu18.04 系统 假设你的服务器上的用户名是 root, 域名或者 ip 地址是 xyz 而且配置好了安全组(阿里云的)和云解析 首先要安装 op ...

  5. 关于vector的描述

    对于有些编译器而言,使用vector<vector<int>> vec;并不能通过,必须采用vector<vector<int> >vec才可以通过.两 ...

  6. wordpress<=4.6版本任意命令执行漏洞

    漏洞简述 当WordPress 使用 PHPMailer 组件向用户发送邮件.攻击者在找回密码时会使用PHPmailer发送重置密码的邮件,利用substr(字符串截取函数).$run(系统调用函数) ...

  7. MySQL 8 批处理模式

    shell> mysql -h host -u user -p < batch-file 强制执行脚本,即使某些语句参数错误,可以添加 --force 参数 如果MySQL运行在Windo ...

  8. SpringBoot学习- 11、更好用的代码生成工具EasyCode

    SpringBoot学习足迹 之前的mybatis代码生成工具无法自定义模板,找了一个可以自定义模板的插件,初学者最好用比较齐全的代码生成工具,不然拼错一个代码会掉坑里半天爬不出来. 有的同学会说干么 ...

  9. Spark学习之路 (六)Spark Transformation和Action[转]

    Transformation算子 基本的初始化 (1)java static SparkConf conf = null; static JavaSparkContext sc = null; sta ...

  10. 备战2020年金三银四,看这一篇面试文章就够了(合适各级Java人员)

    本文不是原创.为整理所得!但是内容是很干货的!我看了也有帮助.做个分享. 企业开始上班,就意味着大批量的招聘需求正在路上.在即将到来的金三银四跳槽面试季,提前祝贺大家拿到大厂offer.前程似锦.前程 ...