批改状态:未批改
老师批语:
今天,主要学习的是ThinkPhp51的验证,主要有一下集中验证方式:
验证器实际上是类,通常在app下与index平级来新建文件夹validate,然后下面新建staff.php,这里不是强制与控制器下面的操作方法同名,而是约定,方便。
staff类继承自控制器下validata类 然后里面有几个属性可以复写.
. $rule 可以自定义规则
. $message 可以定义错误提示信息
. $scene 可以定义验证场景 (可选)
namespace app\index\validate;use think\Validate;class Staff extends Validate{//字段验证规则protected $rule = ['name' => 'require|chsAlpha|length:3, 20','sex' => 'require|number|in:0, 1','age' => 'require|number|between:18, 59','email' => 'require|email'];//验证错误提示protected $message = ['name.require' => '员工姓名不能为空','name.chsAlpha' => '姓名必须是字母或者汉字','name.length' => '姓名长度必须在3到20个字符之间','sex.require' => '性别不能为空','sex.number' => '性别必须是整数','sex.in' => '性别必须是0或者1','age.require' => '年龄不能为空','age.number' => '年龄必须是整数','age.between' => '年龄必须是18到60之间','email.require' => '邮箱不能为空','email.email' => '邮箱格式不正确'];//验证场景(可选)protected $scene = ['add' => ['name', 'sex', 'age', 'email'],'edit' => ['name', 'sex']];}
新建demo5操作来实现验证器验证,首先导入自定义验证器staff,然后避免重名命名为StaffValidate,为了简化操作,直接引入数据,实例化自定义验证器类,用check方法验证,得到结果,结果为布尔值,通过if判读显示验证结果,其中严重错误信息可以用getError方法来得到
//数据验证1 验证器类
public function demo5(){//为简化操作 直接给定数据$data = ['name' => 'jijiming','sex' => 1,'age' => 50,'email' => 'admin@164.com'];//实例化验证器类$validate = new StaffValidate();//验证数据 得到结果$result = $validate->check($data);if (!$result) {halt($validate->getError());}return '验证成功';}
make方法实例化框架内置验证类,然后同上进行验证,显示验证结果。
public function demo6(){//验证规则$rule = ['name' => 'require|chsAlpha|length:3, 20','sex' => 'require|number|in:0, 1','age' => 'require|number|between:18, 59','email' => 'require|email'];//验证错误提示$message = ['name.require' => '员工姓名不能为空','name.chsAlpha' => '姓名必须是字母或者汉字','name.length' => '姓名长度必须在3到20个字符之间','sex.require' => '性别不能为空','sex.number' => '性别必须是整数','sex.in' => '性别必须是0或者1','age.require' => '年龄不能为空','age.number' => '年龄必须是整数','age.between' => '年龄必须是18到60之间','email.require' => '邮箱不能为空','email.email' => '邮箱格式不正确'];//用make方法实例化框架内置验证器类$validate = Validate::make($rule, $message);//获取数据$data = ['name' => 'jijiming','sex' => 1,'age' => 50,'email' => 'admin@164.com'];//验证数据得到结果$result = $validate->check($data);if (!$result) {halt($validate->getError());}return '验证成功';}
new直接实例化验证类,然后通过链式调用方法rule message给定验证条件和验证错误提示,最后同上进行验证和显示。
public function demo7(){//直接实例化验证类$validate = new Validate();//链式调用 给定验证规则 验证错误信息$validate->rule(['name' => 'require|chsAlpha|length:3, 20','sex' => 'require|number|in:0, 1','age' => 'require|number|between:18, 59','email' => 'require|email'])->message(['name.require' => '员工姓名不能为空','name.chsAlpha' => '姓名必须是字母或者汉字','name.length' => '姓名长度必须在3到20个字符之间','sex.require' => '性别不能为空','sex.number' => '性别必须是整数','sex.in' => '性别必须是0或者1','age.require' => '年龄不能为空','age.number' => '年龄必须是整数','age.between' => '年龄必须是18到60之间','email.require' => '邮箱不能为空','email.email' => '邮箱格式不正确']);//获取数据$data = ['name' => 'jijiming','sex' => 1,'age' => 50,'email' => 'admin@164.com'];//验证数据获得结果$result = $validate->check($data);if (!$result) {halt($validate->getError());}return '验证成功';}
demo8渲染表单前端页面,相应建好demo8.html,讲表单里的数据提交给demo9处理。
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Title</title></head><body><h3>用户登录</h3><form action="{:url('demo9')}" method="post"><p><label for="email">邮箱:</label><input type="email" name="email" id="email"></p><p><label for="password">密码:</label><input type="password" name="password" id="password"></p><!--隐藏域 把令牌传递过去--><!--<input type="hidden" name="__token__" value='{:token()}'>--><input type="hidden" name="__token__" value="{$Request.token}"><p><button>登陆</button></p></form></body></html>
public function demo8(){return $this->fetch();}//用令牌验证表单public function demo9(){//获取数据$data = Request::param();//实例化内置验证类$validate = Validate::make();//设定规则$result = $validate->rule('email|邮箱', 'require|email')->rule('password|密码', 'require')->check($data);if (!$result){$this->error($validate->getError());}$this->success('验证通过', 'admin');}
//其实在控制器基类controller中有验证方法validatepublic function demo10(){//获取数据$data = Request::param();//获取规则$rule = ['email|邮箱' => 'require|email','password|密码' => 'require'];//验证结果//如果验证成功返回布尔值//如果验证失败返回错误信息$result = $this->validate($data, $rule);if ($result === true) {$this->success('验证通过', 'admin');} else {$this->error($result);}}//验证通过 后台public function admin() {return $this->display('<h1>管理后台</h1>');}
今天的课程还是相对简单,需要注意自定义验证器类 内置验证类 链式调用 以及表单验证的具体方法,还有在html中{:url('demo9')}可以指向调用页面路径。
<!--隐藏域 把令牌传递过去--><!--<input type="hidden" name="__token__" value='{:token()}'>--><input type="hidden" name="__token__" value="{$Request.token}">
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号