编程练习:在laravel中验证验证规则
简单的验证表示法
$validatedData = $request->validate([ 'title' => 'required|unique:posts|max:255', 'body' => 'required', ]);
字段数据实现说明
如果你的HTTP请求包含“嵌套”参数(即字段),那么你可以验证规则这些参数是使用语法“点”。
作者是字段
$request->validate([ 'title' => 'required|unique:posts|max:255', '' => 'required', '' => 'required', ]);
错误返回
@if ($errors->any())
- foreach ( $errors->all() as $error)
- {{ $error }}
@endforeach
@ endif
AJAX请求和验证
在此示例中,我们使用传统表单向应用程序提交数据。然而,实际上,许多程序都使用 AJAX 来发送请求。当我们在对 AJAX 的请求中使用 validate 方法时,Laravel 不会生成重定向响应,而是生成包含所有验证错误信息的 JSON 响应。 “表单请求”来处理更复杂的逻辑。表单请求是包含验证逻辑的自定义请求类。
可以使用Artisan make:request命令创建表单请求类:
php artisan make:request StoreBlogPost
新生成的类保存在app/Http/Requests 目录。如果该目录不存在,则运行 make:request 命令时会创建该目录。让我们在规则方法中添加一些验证规则:
/** * 获取适用于请求的验证规则。 * * @return array */ public function rules() { return [ 'title' => 'required|unique:posts|max:255', 'body' => 'required', ]; }
{tip} 您可以将任何依赖项传递给规则方法。它们将由 Laravel 提供的服务容器自动解析。
验证规则如何工作?您所要做的就是在控制器方法中输入传入的请求。在调用控制器之前验证传入的表单请求方法,这意味着您不需要在控制器中编写任何验证逻辑:
/** * 存储传入的博客文章。 * * @param StoreBlogPost $request * @return Response */ public function store(StoreBlogPost $request) { // 传入的请求通过验证... // 获取通过验证的数据... $validated = $request->validated(); }
如果验证失败,将生成一个重定向响应,将用户返回到之前的位置。这些错误也会显示在会话中,以便可以显示在页面上。如果传入请求是针对 AJAX 的,则会向用户返回 HTTP 响应,其中包含 JSON 数据,状态代码为 422 以及验证错误信息。
$validator = Validator::make($request->all(), [ 'title' => 'required|unique:posts|max:255', 'body' => 'required', ]); if ($validator->fails()) { return redirect('post/create') ->withErrors($validator) ->withInput(); }
验证通过后,还可以有hook。验证后挂钩
验证器还允许您添加成功验证后启用的回调函数以移至下一个验证步骤,甚至向消息集合添加其他错误消息。要使用它,只需在验证实例上使用 after 方法即可:
$validator = Validator::make(...); $validator->after(function ($validator) { if ($this->somethingElseIsInvalid()) { $validator->errors()->add('field', 'Something is wrong with this field!'); } }); if ($validator->fails()) { // }
处理错误消息
unique 连接数据库进行验证
unique:table,column, except,idColumn
要验证的字段在给定的数据库表中必须是唯一的。如果未指定列,则使用字段本身的名称。
输入自定义字段
'email' => 'unique:users,email_address'
自定义数据库连接
有时,您可能需要设置由有效数据库连接创建的自定义查询。在上例中,身份验证规则设置为 unique:users,
相当于使用 默认数据库连接来查询数据库。要修改它,使用点方法指定连接和表名 :
'email' => 'unique:'
自定义验证规则
使用规则对象
Laravel 提供了很多有用的验证规则;也支持自己的规则。注册自定义验证规则的一种方法是使用规则对象。您可以使用 Artisan make:rule 命令生成新的规则对象。接下来,我们使用此命令生成一条确认字符串很大的规则。 Laravel 将新规则保存在 app/Rules 目录中:
php artisan make:rule Uppercase
创建规则后,我们可以定义其行为。规则对象包含两个方法:pass 和 messages。 pass 方法接收属性值和名称,并根据属性值是否符合规则返回 true 或 false。报告方法应返回一条验证错误消息,在验证失败时应使用该消息:
<?php namespace App\Rules; use Illuminate\Contracts\Validation\Rule; class Uppercase implements Rule{ /** * 判断验证规则是否通过。 * * @param string $attribute * @param mixed $value * @return bool */ public function passes($attribute, $value) { return strtoupper($value) === $value; } /** * 获取验证错误消息。 * * @return string */ public function message() { return 'The :attribute must be uppercase.'; }}
当然,如果您想从翻译文件返回错误消息,您可以从报告方法中调用 trans 辅助函数:
/**
* 获取验证错误消息。
*
* @return string
*/public function message(){
return trans('');}
一旦定义了规则对象,就可以将实例传递过去与其他验证规则一起发送给验证器:
use App\Rules\Uppercase;
$request->validate([
'name' => ['required', 'string', new uppercase ] ,]);
隐式扩展
默认情况下,当待验证的属性不存在或包含所需规则定义的空值时,不执行正常的验证规则,包括自定义扩展。例如,唯一规则不会验证 null 值:
$rules = ['name' => 'unique'];
$input = ['name' => null];
Validator::make ($input,$rules)->passes(); // true
如果您要求该属性即使为空也必须验证,则必须表明该属性是必需的。要创建这样的“隐式”扩展,请使用 Validator::extendImplicit() 方法:
Validator::extendImplicit('foo', function ($attribute, $value, $parameters, $validator) {
return $value == 'foo';
});
使用form请求表单验证数据:
可用的验证规则
AcceptedActive URLAfter (Date)After Or Equal (DephaAlArameric)Alpharay Before or equal到(日期) 布尔值 日期之间 确认日期 等于日期 格式 不同的数字 尺寸之间的数字(图像文件) 存在不同的电子邮件(数据库) 填充的文件 大于 大于或等于图像(文件) TMEJLegersIPIn Orhan 等于 文件的 sMIME 类型 ExMintensionNot InNot RegexN ullableNumericPresent正则表达式 必需 if required if not required if not required with required with all without required Without AllSameSizeStarts WithStringTimezoneUnique (Database)URLUUID
特别声明几种用途:
required_if
Verify when id '*** "Ide quired_if: ID ",
'int'
],
如果 id 字段为空,然后验证orderId
required_if:id,1,2,3
含义:当id为1、或2、3时,验证orderId
如果id为空,则证明验证id为空 当 type 不等于 1 时,验证 orderId
required_unless
当 type 不等于 1 时,超过 orderId
required_unless:type,1
required❙❙required bar,…
其他 当出现任意指定字段时,验证字段必须存在且不能为空
required_with_all
required_with_all:foo,bar,…
验证字段必须存在且不能为其他所有指定的字段字段出现。不为零。
required_without
required_without:foo,bar,…
如果没有出现其他指定字段,则验证的字段必须存在且不能为空。
required_without_all
required_without_all:foo,bar,…
验证的字段必须存在且不能为空,除非出现所有其他指定字段。
same:field
确认字段的值必须与给定字段的值相同。
官方验证网址:
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。