laravel5.5驗證器
阿新 • • 發佈:2018-11-05
request直接驗證
使用 Illuminate\Http\Request 物件提供的 validate 方法來實現這一功能,
如果驗證規則通過,程式碼將會繼續往下執行;
反之,如果驗證失敗,將會丟擲一個異常,相應的錯誤響應也會自動傳送給使用者。
在這個傳統的 HTTP 請求案例中,將會生成一個重定向響應,
如果是 AJAX 請求則會返回一個 JSON 響應。
<?php
$rule=[
'id'=>'required',
'name'=>'required|max:10'
];
$msg= [
'id.required'=>'id值錯誤',
'name.required'=>'name必填',
'name.max'=>'名稱不能超過10個字',
];
$re=request()->validate($rule,$msg);
//驗證不通過則直接跳轉首頁了
複雜表單請求驗證
對於更復雜的驗證場景,建立一個“表單請求”。
表單請求是包含驗證邏輯的自定義請求類,可以使用 Artisan 命令 make:request:
<?php
#php artisan make:request StoreBlogPost
//編寫規則
class StoreBlogPost extends FormRequest{
public function rules(){
return [
'title' => 'required|unique:posts|max:255',
'body' => 'required',
];
}
}
//使用,在控制器方法中例項化即可
class Blog extends Controller{
public function store(StoreBlogPost $request ){
/*如果驗證失敗,重定向響應會被生成並將使用者退回上一個位置,
錯誤資訊也會被儲存到一次性 Session 以便在檢視中顯示。
如果是 AJAX 請求,帶 422 狀態碼的 HTTP 響應將會返回給使用者,
該響應資料中還包含了 JSON 格式的驗證錯誤資訊。*/
}
}
Validator驗證器
<?php
$rule=[
'id'=>'required',
'name'=>'required|max:10'
];
$msg=[
'id.required'=>'id值錯誤',
'name.required'=>'name必填',
'name.max'=>'名稱不能超過10個字',
];
$validator=\Validator::make(request()->input(),$rule,$msg);
$validator->after(function($validator) {
$validator->errors()->add('testField', 'Something is wrong with this field!');
});
if($validator->fails()){
dump($validator->errors()->get('testField'));
dump($validator->errors()->first('id'));
dump($validator->errors()->toArray());
dd($validator->errors()->all());
}
判斷驗證是否通過並處理驗證資訊
<?php
if ($validator->fails())
{
$messages = $validator->messages();
dump($messages);
//$messages格式如下
/*MessageBag {#462 ▼
#messages: array:3 [▼
"id" => array:1 [▼
0 => "id值錯誤"
]
"name" => array:1 [▼
0 => "name必填"
]
"testField" => array:1 [▼
0 => "Something is wrong with this field!"
]
]
#format: ":message"
}*/
echo $messages->first('id'); //獲取某個欄位的第一個錯誤資訊
foreach ($messages->get('id') as $message){} //遍歷某個欄位的所有錯誤資訊
foreach ($messages->all() as $message){} //遍歷所有錯誤資訊
if ($messages->has('id')){} //判斷某個欄位是否有錯誤
//獲取某個欄位的錯誤資訊並格式化
echo $messages->first('id', '<b style="color:red">:message</b>');
//所有錯誤資訊格式化
foreach ($messages->all('<li>:message</li>') as $message){}
}
框架自帶的驗證規則
accepted //欄位值為 yes, on, 或是 1 時,驗證才會通過。這在確認"服務條款"是否同意時很有用。
active_url //欄位值通過 PHP 函式 checkdnsrr 來驗證是否為一個有效的網址。
after:date //驗證欄位是否是在指定日期之後。這個日期將會使用 PHP strtotime 函式驗證。
alpha //欄位僅全數為字母字串時通過驗證。
alpha_dash //欄位值僅允許字母、數字、破折號(-)以及底線(_)
alpha_num //欄位值僅允許字母、數字
array //欄位值僅允許為陣列
before:date //驗證欄位是否是在指定日期之前。這個日期將會使用 PHP strtotime 函式驗證。
between:min,max //欄位值需介於指定的 min 和 max 值之間。字串、數值或是檔案都是用同樣的方式來進行驗證
confirmed //欄位值需與對應的欄位值 foo_confirmation 相同。
例如,如果驗證的欄位是 password ,那對應的欄位 password_confirmation 就必須存在且與 password 欄位相符。
date //欄位值通過 PHP strtotime 函式驗證是否為一個合法的日期
date_format:format //欄位值通過 PHP date_parse_from_format 函式驗證符合 format 制定格式的日期是否為合法日期
different:field //欄位值需與指定的欄位 field 值不同
digits:value //欄位值需為數字且長度需為 value
digits_between:min,max //欄位值需為數字,且長度需介於 min 與 max 之間
boolean //欄位必須可以轉換成布林值,可接受的值為 true, false, 1, 0, "1", "0"
email //欄位值需符合 email 格式
exists:table,column //欄位值需與存在於資料庫 table 中的 column 欄位值其一相同
image //檔案必需為圖片(jpeg, png, bmp, gif 或 svg)
in:foo,bar,... //欄位值需符合事先給予的清單的其中一個值
integer //欄位值需為一個整數值
ip //欄位值需符合 IP 位址格式
max:value //欄位值需小於等於 value。字串、數字和檔案則是判斷 size 大小
mimes:foo,bar,... //檔案的 MIME 類需在給定清單中的列表中才能通過驗證
min:value //欄位值需大於等於 value。字串、數字和檔案則是判斷 size 大小
not_in:foo,bar,... //欄位值不得為給定清單中其一
numeric //欄位值需為數字
regex:pattern //欄位值需符合給定的正規表示式
required //欄位值為必填
required_if:field,value //欄位值在 field 欄位值為 value 時為必填
required_with:foo,bar,... //欄位值 僅在 任一指定欄位有值情況下為必填
required_with_all:foo,bar,... //欄位值 僅在 所有指定欄位皆有值情況下為必填
required_without:foo,bar,... //欄位值 僅在 任一指定欄位沒有值情況下為必填
required_without_all:foo,bar,... //欄位值 僅在 所有指定欄位皆沒有值情況下為必填
same:field //欄位值需與指定欄位 field 等值
size:value //欄位值的尺寸需符合給定 value 值。對於字串來說,value 為需符合的字串長度。
對於數字來說,value 為需符合的整數值。對於檔案來說,value 為需符合的檔案大小(單位 kb)。
timezone //欄位值通過 PHP timezone_identifiers_list 函式來驗證是否為有效的時區
unique:table,column,except,idColumn //欄位值在給定的資料庫中需為唯一值。
如果 column(欄位) 選項沒有指定,將會使用欄位名稱
url //欄位值需符合 URL 的格式