- 需求:在使用者在送出表單資料的時候,對使用者送出的資料進行驗證,如合規,唯一性等等
這裡就使用到laravel中的驗證功能了
驗證的使用
- 這裡就簡單的使用一下這個功能,這裡我們建立一個表單,模拟注冊功能,隻有使用者名和密碼選項進行送出 我們建立一個使用者admin密碼123456,第一次能夠建立成功。如果下一次再次有使用admin進行注冊将進行提示。
laravel表單驗證提示和自定義驗證詞庫驗證的使用自定義驗證
在表單頁面中加入錯誤提示的代碼塊
<!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']);
}
效果相同,驗證的資訊也被自定義了,沒有使用全局定義的詞庫