1. 在第一次验证失败后停止#
有时,你希望在某个属性第一次验证失败后停止运行验证规则。为了达到这个目的,附加 bail 规则到该属性:
$this->validate($request, [
'title' => 'bail|required|unique:posts|max:255',
'body' => 'required',
]);
2. 嵌套参数
如果你的 HTTP 请求包含一个 「嵌套」 参数(即数组),那你可以在验证规则中通过 「点」 语法来指定这些参数。
$this->validate($request, [
'title' => 'required|unique:posts|max:255',
'author.name' => 'required',
'author.description' => 'required',
]);
3. AJAX 请求 & 验证#
我们使用传统的表单将数据发送到应用程序。但实际情况中,很多程序都会使用 AJAX 来发送请求。当我们对 AJAX 的请求中使用 validate 方法时,Laravel 并不会生成一个重定向响应,而是会生成一个包含所有验证错误信息的 JSON 响应。这个 JSON 响应会包含一个 HTTP 状态码 422 被发送出去。
4. 表单请求
创建文件
php artisan make:request StoreBlogPost
文件展示
<?php
namespace AppHttpRequests;
use IlluminateFoundationHttpFormRequest;
use IlluminateHttpRequest;
class StoreServergroupPost extends FormRequest
{
//表单授权
public function authorize()
{
//这里可以做一些权限验证
//return false;
return true;
}
public function rules(Request $request)
{
$rules = [
'name' => 'required',
'selectedMaster' => 'required',
'selectedFailover' => 'required',
];
if($request->selectedFailover){
$rules['selectedSlave'] = 'required';
$rules['tableData'] = 'required';
}
return $rules;
}
public function messages()
{
return [
'name.required' => '请输入集群名称',
'selectedMaster.required' => '请选择主服务器',
'selectedFailover.required' => '请选择是否开启',
'selectedSlave.required' => '请选择从服务器',
'tableData.required' => '网卡信息不能为空',
];
}
//请求之后的钩子
public function withValidator($validator)
{
$validator->after(function ($validator) {
if ($this->somethingElseIsInvalid()) {
$validator->errors()->add('field', 'Something is wrong with this field!');
}
});
}
}
控制器类上面引入
use AppHttpRequestsStoreServergroupPost;
控制器方法中使用此类
//这里的类型提示不是Request了
public function store(StoreServergroupPost $request)
{
// The incoming request is valid...
}
5. 两种方式
-
1> 使用validate方法
-
2> 手动创建验证器实例
$v = Validator::make($input, $rule,$message);
if($v->fails()){
//return xxxx
}
还可以加验证后的钩子
$validator = Validator::make(...);
$validator->after(function ($validator) {
if ($this->somethingElseIsInvalid()) {
$validator->errors()->add('field', 'Something is wrong with this field!');
}
});
if ($validator->fails()) {
//
}
需要注意的是
- 使用validate方法直接返回json,并且第一个参数是$request对象,
- 手动创建的话可以使用$errors = $validator->errors()->toArray();获取错误信息
6. 占位符
:attribute 占位符会被验证字段的实际名称取代。除此之外,你还可以在验证消息中使用其他占位符。例如:
$messages = [
'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',
];
7. 获取错误消息
$errors = $validator->errors();
查看特定字段的第一个错误消息#
echo $errors->first('email');
如果你想以数组的形式获取指定字段的所有错误消息,则可以使用 get 方法:
foreach ($errors->get('email') as $message) {
//
}
如果要验证表单的数组字段,你可以使用 * 来获取每个数组元素的所有错误消息:
foreach ($errors->get('attachments.*') as $message) {
//
}
所有字段的错误消息,可以使用 all 方法:
foreach ($errors->all() as $message) {
//
}
判断特定字段是否含有错误消息#
if ($errors->has('email')) {
//
}