目录
1,使用 Artisan 命令 make:request 来创建表单请求类
表单请求验证是 Laravel 框架提供的用户表单数据验证方案,此方案相 比手工调用 validator 来说,能处理更为复杂的验证逻辑,更加适用于大型程序
1,使用 Artisan 命令 make:request
来创建表单请求类
php artisan make:request UserRequest
2,生成文件
执行后会在Http\Requests文件夹下生成UserRequest.php
工作机制:是利用 Laravel 提供的依赖注入功能,在控 制器方法声明中,传参 UserRequest。这将触发表单请 求类的自动验证机制,验证发生在 UserRequest 中,并使用此文件中方法 rules() 定制的规则
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class UserRequest extends FormRequest
{
/**
表单验证自带的另一个功能 —— 权限验证
return true,意味所有权限都可以通过
**/
public function authorize()
{
return false;
}
/**
只有当验证通过时,才会执行控制器方法中的代码。否则抛出异 常,并重定向至上一个页面,附带验证失败的信息
**/
public function rules()
{
return [
//
];
}
}
3,演示:
public function rules()
{
/*unique:users,name,'. Auth::id()忽略掉当前登录的用户名重复*/
return [
'name' => 'required|between:3,25|regex:/^[A-Za-z0-9\-\_]+$/|unique:users,name,'.Auth::id(),
'email' => 'required|email',
];
}
控制器:
public function update(UserRequest $request,User $user){
$user->update($request->all());
return redirect()->route('users.show',$user->id)->with('sucess','信息修改成功');
}
表单:
<form action="{{ route('users.update', $user->id) }}" method="POST">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
</form>
4,错误提示
@if (count($errors) > 0)
<div>
<div>
<b style="color: red;">有错误发生:</b>
</div>
<ul>
@foreach ($errors->all() as $error)
<li style="color: red;">
{{ $error }}
</li>
@endforeach
</ul>
</div>
@endif
提示优化:
public function messages(){
return [
'name.unique' => '用户名已被占用,请重新填写',
'name.regex' => '用户名只支持英文、数字、横杠和下划线。',
'name.between' => '用户名必须介于 3 - 25 个字符之间。',
'name.required' => '用户名不能为空。',
];
}
5,常用验证规则
- required------验证的字段必须存在于输入数据中,而不是空
- regex:pattern------验证的字段必须与给定的正则表达式匹配。注意: 当使用
regex
规则时,你必须使用数组,而不是使用|
分隔符,特别是如果正则表达式包含|
字符。 - between:min,max------验证字段的大小必须在给定的 min 和 max 之间。字符串、数字、数组和文件的计算方式都使用
size
方法 - email------验证字段必须为正确格式的电子邮件地址
- unique:table,column,except,idColumn------验证的字段在给定的数据库表中必须是唯一的。如果没有指定
column
,将会使用字段本身的名称 - max:value------验证中的字段必须小于或等于 value
- array------验证的字段必须是一个 PHP 数组
- dimensions-------Laravel 5.3 中,新增了图片尺寸验证规则。可以传递以下参数到验证规则,min_width:宽度比这个尺寸小的图片将会被拒绝,max_width:宽度比这个尺寸大的图片将会被拒绝,min_height:高度比这个尺寸小的图片将会被拒绝,max_height:高度比这个尺寸大的图片将会被拒绝