博客列表 >tp51基础 验证器 验证类 独立验证 表单验证及提交令牌验证 2019年3月25日

tp51基础 验证器 验证类 独立验证 表单验证及提交令牌验证 2019年3月25日

小明的博客
小明的博客原创
2019年11月25日 08:36:20866浏览

今天,主要学习的是ThinkPhp51的验证,主要有一下集中验证方式:

. 验证器
  • 验证器实际上是类,通常在app下与index平级来新建文件夹validate,然后下面新建staff.php,这里不是强制与控制器下面的操作方法同名,而是约定,方便。

  • staff类继承自控制器下validata类 然后里面有几个属性可以复写.
    . $rule 可以自定义规则
    . $message 可以定义错误提示信息
    . $scene 可以定义验证场景 (可选)

  1. namespace app\index\validate;
  2. use think\Validate;
  3. class Staff extends Validate
  4. {
  5. //字段验证规则
  6. protected $rule = [
  7. 'name' => 'require|chsAlpha|length:3, 20',
  8. 'sex' => 'require|number|in:0, 1',
  9. 'age' => 'require|number|between:18, 59',
  10. 'email' => 'require|email'
  11. ];
  12. //验证错误提示
  13. protected $message = [
  14. 'name.require' => '员工姓名不能为空',
  15. 'name.chsAlpha' => '姓名必须是字母或者汉字',
  16. 'name.length' => '姓名长度必须在3到20个字符之间',
  17. 'sex.require' => '性别不能为空',
  18. 'sex.number' => '性别必须是整数',
  19. 'sex.in' => '性别必须是0或者1',
  20. 'age.require' => '年龄不能为空',
  21. 'age.number' => '年龄必须是整数',
  22. 'age.between' => '年龄必须是18到60之间',
  23. 'email.require' => '邮箱不能为空',
  24. 'email.email' => '邮箱格式不正确'
  25. ];
  26. //验证场景(可选)
  27. protected $scene = [
  28. 'add' => ['name', 'sex', 'age', 'email'],
  29. 'edit' => ['name', 'sex']
  30. ];
  31. }
  • 新建demo5操作来实现验证器验证,首先导入自定义验证器staff,然后避免重名命名为StaffValidate,为了简化操作,直接引入数据,实例化自定义验证器类,用check方法验证,得到结果,结果为布尔值,通过if判读显示验证结果,其中严重错误信息可以用getError方法来得到

    //数据验证1 验证器类

    1. public function demo5(){
    2. //为简化操作 直接给定数据
    3. $data = [
    4. 'name' => 'jijiming',
    5. 'sex' => 1,
    6. 'age' => 50,
    7. 'email' => 'admin@164.com'
    8. ];
    9. //实例化验证器类
    10. $validate = new StaffValidate();
    11. //验证数据 得到结果
    12. $result = $validate->check($data);
    13. if (!$result) {
    14. halt($validate->getError());
    15. }
    16. return '验证成功';
    17. }
    . 独立验证 直接使用框架验证类
  • 直接使用框架下的验证器类,导入他, 用make方法实例化框架内置验证类,然后同上进行验证,显示验证结果。
    //数据验证2 独立验证 直接调用框架验证类 不用创建验证器类
    1. public function demo6(){
    2. //验证规则
    3. $rule = [
    4. 'name' => 'require|chsAlpha|length:3, 20',
    5. 'sex' => 'require|number|in:0, 1',
    6. 'age' => 'require|number|between:18, 59',
    7. 'email' => 'require|email'
    8. ];
    9. //验证错误提示
    10. $message = [
    11. 'name.require' => '员工姓名不能为空',
    12. 'name.chsAlpha' => '姓名必须是字母或者汉字',
    13. 'name.length' => '姓名长度必须在3到20个字符之间',
    14. 'sex.require' => '性别不能为空',
    15. 'sex.number' => '性别必须是整数',
    16. 'sex.in' => '性别必须是0或者1',
    17. 'age.require' => '年龄不能为空',
    18. 'age.number' => '年龄必须是整数',
    19. 'age.between' => '年龄必须是18到60之间',
    20. 'email.require' => '邮箱不能为空',
    21. 'email.email' => '邮箱格式不正确'
    22. ];
    23. //用make方法实例化框架内置验证器类
    24. $validate = Validate::make($rule, $message);
    25. //获取数据
    26. $data = [
    27. 'name' => 'jijiming',
    28. 'sex' => 1,
    29. 'age' => 50,
    30. 'email' => 'admin@164.com'
    31. ];
    32. //验证数据得到结果
    33. $result = $validate->check($data);
    34. if (!$result) {
    35. halt($validate->getError());
    36. }
    37. return '验证成功';
    38. }
    . 独立验证的链式调用方法
  • 这里用new直接实例化验证类,然后通过链式调用方法rule message给定验证条件和验证错误提示,最后同上进行验证和显示。
    //数据验证3 独立验证另一种常用语法
    1. public function demo7(){
    2. //直接实例化验证类
    3. $validate = new Validate();
    4. //链式调用 给定验证规则 验证错误信息
    5. $validate->rule([
    6. 'name' => 'require|chsAlpha|length:3, 20',
    7. 'sex' => 'require|number|in:0, 1',
    8. 'age' => 'require|number|between:18, 59',
    9. 'email' => 'require|email'
    10. ])->message([
    11. 'name.require' => '员工姓名不能为空',
    12. 'name.chsAlpha' => '姓名必须是字母或者汉字',
    13. 'name.length' => '姓名长度必须在3到20个字符之间',
    14. 'sex.require' => '性别不能为空',
    15. 'sex.number' => '性别必须是整数',
    16. 'sex.in' => '性别必须是0或者1',
    17. 'age.require' => '年龄不能为空',
    18. 'age.number' => '年龄必须是整数',
    19. 'age.between' => '年龄必须是18到60之间',
    20. 'email.require' => '邮箱不能为空',
    21. 'email.email' => '邮箱格式不正确'
    22. ]);
    23. //获取数据
    24. $data = [
    25. 'name' => 'jijiming',
    26. 'sex' => 1,
    27. 'age' => 50,
    28. 'email' => 'admin@164.com'
    29. ];
    30. //验证数据获得结果
    31. $result = $validate->check($data);
    32. if (!$result) {
    33. halt($validate->getError());
    34. }
    35. return '验证成功';
    36. }
    . 表单验证 令牌提交验证
  • 新建demo8渲染表单前端页面,相应建好demo8.html,讲表单里的数据提交给demo9处理。
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. </head>
  7. <body>
  8. <h3>用户登录</h3>
  9. <form action="{:url('demo9')}" method="post">
  10. <p>
  11. <label for="email">邮箱:</label>
  12. <input type="email" name="email" id="email">
  13. </p>
  14. <p>
  15. <label for="password">密码:</label>
  16. <input type="password" name="password" id="password">
  17. </p>
  18. <!--隐藏域 把令牌传递过去-->
  19. <!--<input type="hidden" name="__token__" value='{:token()}'>-->
  20. <input type="hidden" name="__token__" value="{$Request.token}">
  21. <p>
  22. <button>登陆</button>
  23. </p>
  24. </form>
  25. </body>
  26. </html>
  1. public function demo8(){
  2. return $this->fetch();
  3. }
  4. //用令牌验证表单
  5. public function demo9(){
  6. //获取数据
  7. $data = Request::param();
  8. //实例化内置验证类
  9. $validate = Validate::make();
  10. //设定规则
  11. $result = $validate->rule('email|邮箱', 'require|email')
  12. ->rule('password|密码', 'require')
  13. ->check($data);
  14. if (!$result){
  15. $this->error($validate->getError());
  16. }
  17. $this->success('验证通过', 'admin');
  18. }
. 其实在controller基类下面有validata方法直接操作
  1. //其实在控制器基类controller中有验证方法validate
  2. public function demo10(){
  3. //获取数据
  4. $data = Request::param();
  5. //获取规则
  6. $rule = [
  7. 'email|邮箱' => 'require|email',
  8. 'password|密码' => 'require'
  9. ];
  10. //验证结果
  11. //如果验证成功返回布尔值
  12. //如果验证失败返回错误信息
  13. $result = $this->validate($data, $rule);
  14. if ($result === true) {
  15. $this->success('验证通过', 'admin');
  16. } else {
  17. $this->error($result);
  18. }
  19. }
  20. //验证通过 后台
  21. public function admin() {
  22. return $this->display('<h1>管理后台</h1>');
  23. }

总结

今天的课程还是相对简单,需要注意自定义验证器类 内置验证类 链式调用 以及表单验证的具体方法,还有在html中{:url('demo9')}可以指向调用页面路径。

  1. <!--隐藏域 把令牌传递过去-->
  2. <!--<input type="hidden" name="__token__" value='{:token()}'>-->
  3. <input type="hidden" name="__token__" value="{$Request.token}">
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议