Laravel 5.5 FormRequest 自定義表單請求驗證類
阿新 • • 發佈:2018-06-01
根目錄 use his extends 數據 不一致 不能 登錄模塊 能夠
1、把表單驗證邏輯寫在Controller中,這是最基礎的方法,但是不好維護,如:
1 namespace App\Http\Controllers\Admin; 2 3 use Illuminate\Http\Request; 4 use App\Http\Controllers\Controller; 5 6 class MemberController extends Controller 7 { 8 // 登錄模塊 9 public function login (Request $request){ 10 if($request->isMethod(‘POST‘)){11 $this->validate($request,[ 12 ‘username‘ => ‘required|max:10‘, 13 ‘password‘ => ‘required|between:6,20‘, 14 ],[ 15 ‘username.required‘ => ‘用戶名必填‘, 16 ‘password.required‘ => ‘密碼必填‘, 17 ]);18 19 } 20 return view(‘admin.login‘); 21 } 22 }
這樣寫的話,表單驗證和業務邏輯擠在一起,我們的Controller中就會有太多的代碼,而且重復的驗證規則基本也是復制粘貼。
我們可以利用Form Request來封裝表單驗證代碼,從而精簡Controller中的代碼邏輯,使其專註於業務。而獨立出去的表單驗證邏輯甚至可以復用到其它請求中。
2、首先我們打開dos命令,進入該項目根目錄下,創建request驗證類:
3、MemberRequest公用驗證模塊代碼
<?php namespace App\Http\Requests;use Illuminate\Foundation\Http\FormRequest; class MemberUserRequest extends FormRequest { // 公共部分 public $rules=[ ‘username‘ => ‘required|max:10|unique:la_member‘, ‘password‘ => ‘required|between:6,20|confirmed‘, ]; //這裏我只寫了部分字段,可以定義全部字段 protected $messages=[ ‘username.required‘ => ‘用戶名必填‘, ‘username.max‘ => ‘用戶名最多為10字符‘, ‘username.unique‘ => ‘用戶名已存在‘, ‘email.required‘ => ‘郵箱必填‘, ‘email.email‘ => ‘郵箱格式錯誤11‘, ‘password.required‘ => ‘密碼必填‘, ‘password.between‘ => ‘密碼長度為6-20位字符‘, ‘password.confirmed‘ => ‘兩次密碼不一致‘, ‘code.required‘ => ‘驗證碼不能為空‘, ‘code.between‘ => ‘驗證碼輸入錯誤‘ ]; public function authorize() //這個方法可以用來控制訪問權限,例如禁止未付費用戶訪問 { return true; //默認是false,使用時改成true, } public function rules() { $rules=$this->rules; // \Request::getPathInfo()方法獲取命名路由,用來區分不同頁面 if(\Request::getPathInfo()==‘/admin/reg_sub‘){ //路由為/admin/reg_sub的特有驗證部分 $rules[‘email‘]=‘required|email‘; $rules[‘code‘]=‘required|between:4,4‘; } return $rules; } public function messages(){ //返回自定義消息,不使用的話為默認提示 return $this->messages; } }
4、控制器代碼
3 namespace App\Http\Controllers\Admin; 4 5 use Illuminate\Http\Request; 6 use App\Http\Controllers\Controller; 7 use Crypt; 8 use DB;10 11 12 class MemberController extends Controller 13 { 14 // 登錄模塊 15 public function login (){ 16 return view(‘admin.login‘); 17 } 18 // 登錄提交 19 public function login_sub (\App\Http\Requests\MemberRequest $request){ //引入驗證控制器後它會自動驗證,不需其他操作
20 $username = $request->input(‘username‘); 21 $password = $request->input(‘password‘); 22 $data=[ 23 ‘username‘ => $username, 24 ‘password‘ => Crypt::encrypt($password), 25 ‘login_time‘ => time(), 26 ]; 27 28 //查詢數據庫驗證登陸代碼 29 30 } 31 }
5、登陸視圖模塊
@extends(‘admin/public/pub‘) @section(‘content‘) <div id="myform"> <center><h3>新用戶</h3></center> <form method="post" action="{{url(‘admin/login_sub‘)}}" id=""> {{csrf_field()}} <fieldset> <legend>用戶登陸</legend> <div> <label for="Name">用戶名</label> <input type="text" name="username" value="{{old(‘username‘)}}" class="input" id="Name" size="20" maxlength="30"/> <br> </div> <div> <label for="password">輸入密碼</label> <input type="password" name="password" value="{{old(‘password‘)}}" class="input" id="password" size="18" maxlength="15"/> </div> <div> </div> <div class="enter"> <input name="login" type="submit" class="buttom" value="登陸"/> <a href="{{url(‘admin/reg‘)}}">註冊</a> </div> </fieldset> </form> <br> @if(count($errors)>0) @foreach($errors->all() as $error) {{$error}} @endforeach @endif </div> @endsection
在視圖中提示消息代碼
1 @if(count($errors)>0) 2 @foreach($errors->all() as $error) 3 {{$error}} 4 @endforeach 5 @endif
也可以單行提示
{{$errors->first()}}
這裏是我總結的一些經驗,使得rules()能夠可復用且只新增一個Request。如果你有別的方法或者想法可以在評論中和我交流。
Laravel 5.5 FormRequest 自定義表單請求驗證類