(1)添加路由(在admin.login中間件)php
Route::any('pass','IndexController@pass');
(2) IndexController.php中添加pass方法數據庫
注意Input、Crypt、User的引用數組
先判斷新密碼是否符合要求以及確認密碼,此時若錯誤,返回的是對象;ui
以後再查詢數據庫,判斷原密碼是否正確,此時錯誤返回的是字符串url
use App\Http\Model\User; use Illuminate\Support\Facades\Input; use Validator; use Crypt;
1 public function pass() 2 { 3 if($input = Input::all()){ 4 //定義每一個字段的要求 5 $rules = [ 6 'password'=>'required|between:6,20|confirmed', 7 //不能爲空;字符在6-20;與確認密碼進行驗證; 8 //修改pass.blade.php中確認密碼的name,將 password_c改成password_confirmation 9 ]; 10 //從新定義錯誤信息,格式: '字段.屬性'=>'信息' 11 $messages = [ 12 'password.required'=>'新密碼不能爲空', 13 'password.between'=>'新密碼6-20位', 14 'password.confirmed'=>'新密碼與確認密碼不一致' 15 ]; 16 $validator = Validator::make($input,$rules,$messages); 17 //利用$validator進行驗證,若是新密碼與確認密碼一致,將獲取輸入的原密碼與數據庫中的密碼比較,若密碼相等,將經過驗證,更新爲新密碼 18 if($validator->passes()){ 19 $user = User::first(); 20 $pass = Crypt::decrypt($user->user_pass); 21 if($pass==$input['password_o']){ 22 $user->user_pass = Crypt::encrypt($input['password']); 23 $user->update(); 24 return back()->with('errors','密碼修改爲功!'); //爲了方便,仍然用errors傳遞25 }else{ 26 //若原密碼錯誤,將返回一個變量到errors中,只是一個字符串 27 return back()->with('errors','原密碼錯誤'); 28 } 29 }else{ 30 //若原密碼、確認密碼沒有經過驗證,則利用withErrroes($validator)保存錯誤信息到errors對象中,並返回到pass.blade.php,因此pass.blade.php須要將其接收 31 //dd($validator->errors()->all()); 32 return back()->withErrors($validator); 33 } 34 35 }else{ 36 return view('admin.pass'); 37 } 38 39 }
(3)pass.blade.php接收錯誤信息spa
count($errors)返回數組中元素的個數或是類的屬性的個數,如若爲字符串返回1; code
大於0代表有錯誤返回,is_object()判斷變量是否爲對象,是則進行遍歷,不然直接輸出信息中間件
在<h3>修改密碼</h3>後面對象
@if(count($errors)>0) <div class="mark"> @if(is_object($errors)) @foreach($errors->all() as $error) <p>{{$error}}</p> @endforeach @else <p>{{$errors}}</p> @endif </div> @endif
(4)修改index.blade.php中修改密碼按鈕blog
<li><a href="{{url('admin/pass')}}" target="main">修改密碼</a></li>
驗證:
首先將新密碼與確認密碼故意輸錯
再次輸入新密碼與確認密碼符合要求,將原密碼輸錯
再次所有輸入正確