[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 { /** * 定义验证规则 */ 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'); } } ``` **使用验证器验证数据** ```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 { /** * 定义验证规则 */ 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'); } } ``` **使用验证器验证数据** ```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(); } } ```