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