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

基本用法

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. 微信小程序如何下载超过大小限制(10M)的视频?(苹果用户仔细看,安卓用户快速看)

    众所周知,微信小程序对下载的文件大小有限制,目前是最大支持10M.我们在用去水印小程序保存视频的时候,如果遇到长视频,视频大小可能就超过限制.遇到这种情况,我们如何才能把视频保存到手机相册呢? 首先, ...

  2. Android 有关在ListView RecycleView 中使用EditText Checkbox的坑

    这是一篇文字超多的博客,哈哈哈,废话自行过滤··· 遇到问题 在开发中我们常会在ListView , RecycleView 列表中添加EditText输入框,或者checkbox复选框.   复选框 ...

  3. 转载:字符编码简介 ASCII UTF-8 ISO8859-1

    字符编码简介 ASCII UTF-8 ISO8859-1 博客分类: 电脑综合知识 XP数据结构Windows  计算机中的一切都是以数字来表示的,字符同样如此.字符编码就是将字符集编码成为数字序列, ...

  4. 如何知道一个路由器的 BSSID ?

    使用 Mac 连接上这个路由器,然后使用 option 按 wifi 按钮,可以在详情页里找到. 有些路由中继的设置需要使用 BSSID ,比如 pandorabox openwrt

  5. Page Object设计模式(一)

    一.简介 主要特点体现在“对界面交互细节的封装”上,使测试用例更专注于业务的操作,从而提高测试用例的可维护性.解决UI变动问题. page对象的一个基本原则经验法则是:凡是人能做的事,page对象通过 ...

  6. JAVA控制流程

    Java代码有三种执行结构流程,顺序结构.分支结构.循环结构 顺序结构 顺序结构是最简单的代码执行结构,从代码开始逐步执行每一句代码到结束 public class C { public static ...

  7. 44.Python实现简易的图书管理系统

    首先展示一下图书管理系统的首页: 这是图书管理系统的发布图书页面: 最后是图书管理系统的图书详情页已经图书进行删除的管理页. 该图书管理系统为练习阶段所做,能够实现图书详情的查询.图书的添加.图书的删 ...

  8. salt 安装 以及salt-api使用

    salt--master    和 salt-minion 控制端 被控制端 通过 salt-api 访问 salt-master  来控制salt-minion 执行 命令  返回结果 LINUX ...

  9. cat基础用法

    Linux中的cat命令连接文件并打印到标准输出设备上(通常是shell).cat的最常见用法之一是显示文件,还可以即时创建文件,并可以直接在终端上进行基本编辑. 创建文件 使用cat命令创建文件,请 ...

  10. 【15】ML项目流程与正交化

    结构化机器学习项目 一 ML项目流程 1,确立目标(确定开发/测试集 + 唯一最优化指标) 确定开发/测试集:开发/测试集应尽可能接近将来应用场景中的数据. 划分数据集:开发集和测试集大小足以评估模型 ...