1. 程式人生 > >laravel5.5驗證器

laravel5.5驗證器

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 的格式