上次我介紹了登入系統的註冊功能,這是我來補充一下Validation驗證格式的部份。一個程式專案建立好之後,不能只是可以work,必須要設想各種可能的漏洞,將他補好。
例如這次的註冊功能,若是使用者給的username是空值呢?會不會程式有出bug了?laravel提供簡單的驗證機制,讓我們可以輕鬆補起這些小漏洞。這次我接著使用上次的註冊function,介紹驗證的內容。
範例:
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);
}
這次我就擷取驗證的那部份,以免太佔版面
說明:
我先講需求:
rule是使用laravel官方給的方法,laravel官網有個rule表,裏面的rule可說是應有盡有,相當豐富,如果真的找不到理想的rule可用,也可以使用regex這個rule自己寫正規表示式。
rule要設定多個使用|
符號隔開即可
補充:使用required這規則表示這項參數是必須的,若是request沒帶此參數或是有參數但是value是空值,都會觸發這條rule
rule表可以參考官網
https://laravel.com/docs/7.x/validation#available-validation-rules
.
加上rule,value再加上想要的字串就行。例如'username.required' => 'username can not null. ',
表示username的rule中,required觸發後,使用的message $validator = Validator::make($request->all(), $rules, $messages);
if ($validator->fails()) {
$error = $validator->errors()->first();
return response()->json(['status' => false, 'error' => $error], 400);
}
$validator->fails()
就會是true而進入判斷式$validator->errors()
會取出MessageBag類別,用first()取出第1向。這回介紹的validation用法,但你可能會覺得我的註冊function被validation佔滿了,顯的臃腫。其實validation還有令一種寫法,將其寫成FormRequest檔案,下次我會另出文章講解,今天就講到這啦,Bye。