Laravel Form 表單的數據校驗


例如,要使用手機號加驗證碼的方式提供登錄網站的功能,那么在處理前端提交的 form 表單時,就不得不對提交的手機號及驗證碼做基本的數據校驗。

手寫規則,非常浪費時間。使用 laravel 內置的 validation 功能可以節省大量的代碼及時間,而且可讀性好一萬倍。

新建一個 request

php artisan make:request LoginPost 

使用獨立的 form request validation 的原因是,可以方便的自定義錯誤信息。

此時會新增一個 request 文件 app/Http/Requests/LoginPost.php

在其中設置校驗規則,及定制化的錯誤信息。(默認是英文錯誤信息)

public function rules() { return [ 'tel' =>'required|regex:/^1[0-9]{10}$/', 'code' => 'required|digits:6', ]; } public function messages() { return [ 'tel.required' => '請填寫手機號', 'tel.regex' => '手機號格式錯誤', 'code.required' => '請填寫驗證碼', 'code.digits' => '驗證碼格式錯誤', ]; } 

注意,不要忘記將生成的 request 文件中的 authorize 函數中的 return false 改成 return true.

建立驗證規則之后,需要將 controller 中對應的處理函數的 Request 替換成定制化的 Request.

例如

public function login(Request $request) 

替換成

public function login(LoginPost $request) 

如果提交的數據沒有通過驗證規則,則 laravel 會自動將請求重定向到之前的請求路徑。

在 blade 模板中顯示錯誤信息

@if ($errors->any()) <div class="jd_login_panle_input" style="padding: 0 26px; font-size: 13px; color: red;"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif 

內置的校驗規則

https://laravel.com/docs/5.5/validation#available-validation-rules

增加業務流程相關的校驗錯誤信息

例如,驗證碼不匹配這樣的錯誤,在 laravel 內置的校驗規則中是無法實現的,這就需要自己去實現。

然后當校驗失敗時,append 定制化的錯誤信息。

// 驗證碼校驗 $redis_code = Redis::get(env('APP_NAME').'sms'.$tel); if ($redis_code != $code) { $validator = Validator::make($request->all(), []); $validator->errors()->add('code', '驗證碼錯誤'); return redirect('/login')->withErrors($validator)->withInput(); } 

參考

https://laravel.com/docs/5.5/validation


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM