iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 22
1
Software Development

後端新手 使用laravel 從零開始 到開出api系列 第 22

Day22 laravel Validation 驗證格式

Day22 laravel Validation 驗證格式

上次我介紹了登入系統的註冊功能,這是我來補充一下Validation驗證格式的部份。一個程式專案建立好之後,不能只是可以work,必須要設想各種可能的漏洞,將他補好。
例如這次的註冊功能,若是使用者給的username是空值呢?會不會程式有出bug了?laravel提供簡單的驗證機制,讓我們可以輕鬆補起這些小漏洞。這次我接著使用上次的註冊function,介紹驗證的內容。

validation驗證

範例:

use Illuminate\Support\Facades\Validator;
# validation check username and password formt
        $rules = [
            'username' => 'required|max:16|alpha_dash',
            'password' => 'required|regex:/[0-9a-zA-Z]{8}/',
            'email' => 'required|email',
        ];
        $messages = [
            'username.required' => 'username can not null. ',
            'username.max' => 'username can not over 16 characters. ',
            'username.alpha_dash' => 'username only have alpha-numeric characters, as well as dashes and underscores . ',
            'password.regex' => 'password should over 8 characters and only 0-9,a-z,A-Z. ',
            'password.required' => 'password should over 8 characters and only 0-9,a-z,A-Z. ',
            'email.email' => 'The email must be a valid email address. ',
        ];
        $validator = Validator::make($request->all(), $rules, $messages);
        if ($validator->fails()) {
            $error = $validator->errors()->first();
            return response()->json(['status' => false, 'error' => $error], 400);
        }

這次我就擷取驗證的那部份,以免太佔版面

說明:

我先講需求:

  1. username : 不可為空值,最大16字元,只允許數字、字母、減號和底線號
  2. password : 不可為空值,只能使用數字及字母,至少8個字元
  3. email : 不可為空值,需為有效的email格式

自訂規則

  • $rules
    這個陣列是設定需要使用哪些驗證的,key的部份打上你想要驗證的變數,value打上要驗證的條件

rule是使用laravel官方給的方法,laravel官網有個rule表,裏面的rule可說是應有盡有,相當豐富,如果真的找不到理想的rule可用,也可以使用regex這個rule自己寫正規表示式。

rule要設定多個使用|符號隔開即可

補充:使用required這規則表示這項參數是必須的,若是request沒帶此參數或是有參數但是value是空值,都會觸發這條rule

rule表可以參考官網
https://laravel.com/docs/7.x/validation#available-validation-rules

自訂error message

  • $messages
    其實沒給message的話,validation也會啟用,只是給的message是laravel默認的訊息,想要自訂errormessage的話就要給。
    $messages也是陣列的型式,key的部份變數後面用.加上rule,value再加上想要的字串就行。例如'username.required' => 'username can not null. ',表示username的rule中,required觸發後,使用的message

使用validation

        $validator = Validator::make($request->all(), $rules, $messages);
        if ($validator->fails()) {
            $error = $validator->errors()->first();
            return response()->json(['status' => false, 'error' => $error], 400);
        }
  • 1
    使用validation驗證request中的參數
  • 2
    if判斷式,若是有參數觸發定下的rule,$validator->fails()就會是true而進入判斷式
  • 3
    取出error message。$validator->errors()會取出MessageBag類別,用first()取出第1向。
  • 4
    回傳錯誤400

這回介紹的validation用法,但你可能會覺得我的註冊function被validation佔滿了,顯的臃腫。其實validation還有令一種寫法,將其寫成FormRequest檔案,下次我會另出文章講解,今天就講到這啦,Bye。


上一篇
Day21 laravel 製作使用者登入api 註冊篇
下一篇
Day23 laravel Validation 驗證格式 FormRequest篇
系列文
後端新手 使用laravel 從零開始 到開出api30

尚未有邦友留言

立即登入留言