- 需求:在用户在提交表单数据的时候,对用户提交的数据进行验证,如合规,唯一性等等
这里就使用到laravel中的验证功能了
验证的使用
- 这里就简单的使用一下这个功能,这里我们创建一个表单,模拟注册功能,只有用户名和密码选项进行提交
我们创建一个用户admin密码123456,第一次能够创建成功。如果下一次再次有使用admin进行注册将进行提示。
在表单页面中加入错误提示的代码块
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
@if (count($errors) > 0)
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{
{
$error }}</li>
@endforeach
</ul>
</div>
@endif
<form method="post" action="/test">
@csrf
<input name="name" type="text">
<input name="password" type="text">
<button type="submit">提交</button>
</form>
</body>
</html>
- 方法一 :在方法里面直接写验证方法,这里我们要求表单输入的规则
public function test(Request $request)
{
$this->validate($request, [
'name' => 'required|unique:user',//name字段为必须字段,并且在数据库里面唯一
'password' => 'required'//password字段为必须提交字段
]);
Uu::create($request->all());
return response()->json(['code'=>200,'msg'=>'create ok']);
}
我们提交一个空的表单,提交数据无法通过验证,从而返回提示信息到页面,起到提示作用
填写重复的name
这里的验证提示为英文,我们需要引入语言拓展包,修改成中文提示
composer require “overtrue/laravel-lang:~3.0”
修改 config/app.php
配置文件,将Illuminate\Translation\TranslationServiceProvider::class,
替换为 Overtrue\LaravelLang\TranslationServiceProvider::class
,,然后将 'locale' => 'en',
修改成 'locale' => 'zh-CN',
最后执行php artisan lang:publish zh-CN
- 方法二:写一个验证类进行处理
php artisan make:request formValidate
在文件Requests/formValidate.php,写上上面的验证信息,在相应的方法中进行注入
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class formValidate extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'name' => 'required|unique:user',
'password' => 'required'
];
}
}
方法中使用,分离出了验证规则信息
public function test(formValidate $request)
{
Uu::create($request->all());
return response()->json(['code'=>200,'msg'=>'create ok']);
}
新增一个表单name名为wbb的提交项,来进行验证
这里我们看见,name,password都能够被解析成相应的中文,但是wbb无法被解析。这个时候我们需要加入wbb的词库。
在 validation.php
中的attributes
中加入词库
自定义验证
加上词库之后就已经生效了,但是这样还是有一个问题,name,password,wbb这些对应的词库现在是全局配置的。在一个系统中的表单中可能出现同一个字段叫不同名字。比如name有些是姓名,有些叫用户名,有些叫昵称等,统一返回名称准确。
-
这里我们进行自定义,我们返回的提示会用户名,下面分两种方式去处理
-
方法一:
formValidate.php
文件中自定义
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class formValidate extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'name' => 'required|unique:user',
'password' => 'required',
'wbb'=>'required'
];
}
public function messages(){
return [
'name.required'=>'请输入用户名',
'name.unique' =>'用户名已经存在'
];
}
}
- 方法二:方法体中直接书写
public function test(Request $request)
{
$rules = [
'name' => 'required|unique:user',
'password' => 'required',
'wbb'=>'required'
];
$messages = [
'name.required'=>'请输入用户名',
'name.unique' =>'用户名已经存在'
];
$validate = Validator::make($request->all(),$rules,$messages);
if ($validate->fails()){
return back()->withErrors($validate);
}
Uu::create($request->all());
return response()->json(['code'=>200,'msg'=>'create ok']);
}
效果相同,验证的信息也被自定义了,没有使用全局定义的词库