若是要驗證的字段是 password
,輸入中必須存在匹配的 password_confirmation
字段。php
驗證的字段值必須與參數字段的值不一樣。html
public function rules() { return [ //... 'password' => 'bail|required|string|between:8,20|confirmed|different:old_password', 'password_confirmation' => 'bail|required|string|between:8,20' //... ]; }
一般咱們的 tags
前端一般會寫成這個樣子:前端
<input name='tags[]' >
而後在後端能夠經過多對多的關聯來實現這個添加標籤的功能,可是其實咱們仔細地想:咱們添加標籤的時候但願達到什麼樣的效果呢?我以爲有下面兩個最簡單的:mysql
tags[]
是不能爲空的。tags[]
不爲空,裏面的每個元素(標籤)應該是惟一的。因此在驗證的時候,咱們能夠這樣:sql
Validator::make($request->all(), [ "tags" => 'required|array', "tags.*" => 'required|string|distinct|min:3', ]);
這裏須要解釋一下,第一條後端
"tags" => 'required|array',
是代表這是一個不能爲空的數組,而後第二條數組
"tags.*" => 'required|string|distinct|min:3',
就是說:tags
數組裏面每一個元素我但願是 string
,並且是惟一的 (distinct),每一個元素最小的長度爲 3。less
第一次驗證失敗後中止運行驗證規則。
只是中止這個字段的驗證,其它字段不影響。ui
messages()
和 attributes()
繼承於Illuminate\Foundation\Http\FormRequest
,能夠重寫驗證字段的含義和提示信息。this
public function messages() { return [ 'password.confirmed' => '兩次輸入的密碼不一致!', 'password.different' => '新密碼與舊密碼不能一致!' ]; }
檢查通過身份驗證的用戶肯定其是否具備更新給定資源的權限。
若是 authorize()
方法返回 false
,則會自動返回一個包含 403
狀態碼的 HTTP 響應,也不會運行控制器的方法。
public function authorize() { return true; }
第一種寫法:unique:(鏈接名)表名,表中對應字段,忽略值,表主鍵
public function rules() { return [ 'name' => 'required|string|unique:mysql.sometable,name', //... ]; }
第二種寫法:使用Illuminate\Validation\Rule
中的unique()
靜態方法
public function rules() { $id = $this->get('id'); return [ 'id' => 'required|integer', 'name' => [ 'required', 'string', Rule::unique('mysql.sometable')->ignore($id, 'id') ], //... ]; }
還有其餘查詢條件時,能夠鏈式使用where()
等方法
public function rules() { $stationId = $this->get('station_id'); return [ //... 'car_number' => [ 'required', 'string', Rule::unique('queue')->where(function ($query) use ($stationId) { $query->where([ ['station_id', $stationId], ['cancel_state', 0]//未取消 ])->whereDate('create_time', today()->toDateString()); })//排隊中不容許重複 ], //... ]; }
有許多規則,視實際狀況使用:
舉個例子
public function rules() { return [ 'tel' => 'required_without_all:mobile,email,address', 'mobile' => 'required_without_all:tel,email,address', 'email' => 'required_without_all:tel,mobile', 'address' => 'required_without_all:tel,mobile', ]; } public function messages() { return [ 'tel.required_without_all' => '當手機號碼、Email、地址都爲空時,電話號碼不能爲空', 'mobile.required_without_all' => '當電話號碼、Email、地址都爲空時,手機號碼不能爲空', 'email.required_without_all' => '當電話號碼、手機號碼都爲空時,Email和地址不能同時爲空', 'address.required_without_all' => '當電話號碼、手機號碼都爲空時,Email和地址不能同時爲空' ]; }