多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## 创建验证器 ~~~ $php think make:validate test@User ~~~ 一个完整的验证器代码包含`$rule`、`$message`、`$scene`,如下: ~~~ <?php namespace app\admin\validate; use think\Validate; class User extends Validate{ // 校验规则 protected $rule = [ 'name'=>'require', '__token__'=>'require|token' ]; // 校验规则 protected $message = [ 'code.require'=>'请输入代码', '__token__.require'=>'验证码必须输入', '__token__.token'=>'请不要重复提交' ]; // 场景设置 protected $scene = [ 'add' => ['code','__token__'], 'edit' => ['code','__token__'] ]; } ~~~ 在控制器中验证如下。 ~~~ <?php declare (strict_types = 1); namespace app\test\controller; use think\Request; use app\test\validate\UsersValidate; use think\exception\ValidateException; // use think\facade\Validate; class User { public function index() { $data = ['name' => 'admin', 'email' => 'thinkphp@qq.com',]; try { // 成功验证后,$ret 为 true $ret = validate(UsersValidate::class)->batch(true)->check($data); } catch (ValidateException $e) { dump($e->getError()); } } ...... ~~~ 一个完整的验证器代码如下: ~~~ <?php declare (strict_types = 1); namespace app\test\validate; use think\Validate; use app\test\model\Users; class UsersValidate extends Validate { /** * 定义验证规则 * 格式:'字段名' => ['规则1','规则2'...] * * @var array */ protected $rule = [ // 'name'=>['require',"unique:users"] ,//unique 会自动把 当前的记录排除掉 // 'name'=>['require',"unique:users,name,1,id"] , 'name|用户名' => 'available_name:admin|require', 'email' => 'email', ]; /** * 定义错误信息 * 格式:'字段名.规则名' => '错误信息' * * @var array */ protected $message = [ 'name.require' => '名字是必须的', 'name.available_name' => '该用户名不可用', ]; protected $scene = [ 'add' => ['name'], 'edit' => ['email'], ]; // 自定义验证规则 public function available_name($value, $rule, $data=[]) { // 保留用户名 if ($rule == $rule) return false; // 已存在用户,返回 false,即不通过验证 $user = Users::where('name', '=', $value)->find(); return $user === null ? true : false; } } ~~~