[TOC] #### 1. 場景一:只有一個密碼框,并且是可選項,留空不修改密碼,不留空則修改密碼 --- **編輯用戶表單** ```html <form action="" method="post"> 用戶名 <input type="text" name="username" value="liang" readonly autocomplete="off"><br> 手機號 <input type="text" name="mobile" value="10086" autocomplete="off"><br> 新密碼 <input type="password" name="password" placeholder="可選項,留空則不修改密碼"><br> <button>確認修改</button> </form> ``` **驗證器類** ```php <?php namespace app\validate; use think\Validate; class User extends Validate { /** * 定義驗證規(guī)則 */ protected $rule = [ 'username' => 'require|unique:user', 'password' => 'require|length:4,16|confirm', 'mobile' => 'require', ]; /** * edit 驗證場景 編輯用戶信息 */ public function sceneEdit() { return $this ->remove('username', 'unique') ->remove('password', 'require|confirm'); } } ``` **使用驗證器驗證數(shù)據(jù)** ```php public function edit() { if ($this->request->isPost()) { $data = input('post.'); try { validate('app\validate\User') ->scene('edit') ->batch(true) ->check($data); } catch (\think\exception\ValidateException $e) { halt('驗證失敗', $e->getError()); } echo '通過驗證'; } else { return view(); } } ``` #### 2. 場景二:兩個密碼框,修改密碼時有新密碼、確認密碼,新密碼框不為空時,確認密碼才驗證 --- **編輯用戶表單** ```html <form action="" method="post"> 用戶名 <input type="text" name="username" value="liang" readonly autocomplete="off"><br> 手機號 <input type="text" name="mobile" value="10086" autocomplete="off"><br> 新密碼 <input type="password" name="password" placeholder="可選項,留空則不修改密碼"><br> 確認密碼 <input type="password" name="newpassword" placeholder="必須和新密碼文本框保持一致"> <br><button>確認修改</button> </form> ``` **驗證器類** ```php <?php namespace app\validate; use think\Validate; class User extends Validate { /** * 定義驗證規(guī)則 */ protected $rule = [ 'username' => 'require|unique:user', 'password' => 'require|length:4,16|confirm', 'mobile' => 'require', ]; /** * 定義錯誤信息 */ protected $message = [ 'newpassword.requireWith' => '確認密碼不能為空', 'newpassword.confirm' => '兩個新密碼不一致', ]; /** * edit 驗證場景 編輯用戶信息 */ public function sceneEdit() { return $this ->remove('username', 'unique') ->remove('password', 'require|confirm') ->append('newpassword', 'requireWith:password|confirm:password'); } } ``` **使用驗證器驗證數(shù)據(jù)** ```php public function edit() { if ($this->request->isPost()) { $data = input('post.'); try { validate('app\validate\User') ->scene('edit') ->batch(true) ->check($data); } catch (\think\exception\ValidateException $e) { halt('驗證失敗', $e->getError()); } echo '通過驗證'; } else { return view(); } } ```