创建验证类

  1. # 创建验证器
  2. php think make:validate 模块名/验证器名(首字母大写)

ThinkPHP5.1推荐使用验证器进行数据验证(也支持使用\think\Validate类进行独立验证)
内置规则:
https://www.kancloud.cn/manual/thinkphp5_1/354107

独立验证(就是写到Controller层,不推荐)

https://www.kancloud.cn/manual/thinkphp5_1/354107

  1. use think\Validate;
  2. $validate = Validate::make([
  3. 'name' => 'require|max:25',
  4. 'email' => 'email'
  5. ],[
  6. 'name.require' => '名称必须填写',
  7. 'name.max' => '名称最多只能是25字',
  8. 'email.email' => '邮箱不合法'
  9. ]);
  10. $data = [
  11. 'name' => 'thinkphp',
  12. 'email' => 'thinkphp@qq.com'
  13. ];
  14. if (!$validate->check($data)) {
  15. dump($validate->getError());
  16. }
  17. # 自定义验证规则
  18. Validate::extend('checkName', function ($value, $rule) {
  19. return $rule == $value ? true : '名称错误';
  20. });

验证器(单独的文件,推荐)

thinkphp5.1之后推荐使用的方式,验证器,就是一个独立的文件,此文件就干一件事件,验证。

  1. # 创建验证器
  2. php think make:validate 模块名/验证器名(首字母大写)
  3. # 验证器
  4. namespace app\index\validate;
  5. use think\Validate;
  6. class User extends Validate
  7. {
  8. protected $rule = [
  9. 'name' => 'require|max:25',
  10. 'age' => 'number|between:1,120',
  11. 'email' => 'email',
  12. ];
  13. protected $message = [
  14. 'name.require' => '名称必须',
  15. 'name.max' => '名称最多不能超过25个字符',
  16. 'age.number' => '年龄必须是数字',
  17. 'age.between' => '年龄只能在1-120之间',
  18. 'email' => '邮箱格式错误',
  19. ];
  20. }
  21. # 控制器
  22. $ret = $this->validate($request->post(),User::class);
  23. if (true !== $ret){
  24. dump($ret);
  25. }

csrf验证

图片1.png
图片2.png
图片3.png
图片4.png

验证码

https://www.kancloud.cn/manual/thinkphp5_1/354122
tp5框架中默认没有自带验证码功能,需要我们自己去引入安装

  1. # 官方提供的tp官方验证码类
  2. composer require topthink/think-captcha
  3. # 模板中引用
  4. <div>{:captcha_img()}</div>
  5. 或者(推荐)
  6. <div><img src="{:captcha_src()}" alt="captcha" /></div>
  7. # 验证
  8. $this->validate($data,[
  9. 'code'=>'require|captcha'
  10. ]);
  11. 或者
  12. if(!captcha_check($captcha)){
  13. // 验证失败
  14. };

验证器去验证图片5.png

控制器

图片6.png

独立去验证验证码

图片7.png

html模板

图片8.png

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>用户登录</title>
  6. <link rel="stylesheet" href="/static/index/css/bootstrap.css"/>
  7. <link rel="stylesheet" href="/static/index/css/bootstrap-theme.css"/>
  8. <style>
  9. #vcode {
  10. cursor: pointer;
  11. }
  12. </style>
  13. </head>
  14. <body>
  15. <br>
  16. <div class="container">
  17. <div class="panel panel-default">
  18. <div class="panel-heading">
  19. <h3 class="panel-title">用户登录</h3>
  20. </div>
  21. <div class="panel-body">
  22. <form class="form-horizontal" method="post" action="{:url('login')}">
  23. <!--csrf验证-->
  24. {:token()}
  25. <div class="form-group">
  26. <label class="col-sm-2 control-label">账号:</label>
  27. <div class="col-sm-10">
  28. <input type="text" class="form-control" name="username">
  29. </div>
  30. </div>
  31. <div class="form-group">
  32. <label class="col-sm-2 control-label">密码:</label>
  33. <div class="col-sm-10">
  34. <input type="text" class="form-control" name="password">
  35. </div>
  36. </div>
  37. <div class="form-group">
  38. <label class="col-sm-2 control-label">验证码:</label>
  39. <div class="col-sm-5">
  40. <input type="text" class="form-control" name="code">
  41. </div>
  42. <div class="col-sm-5">
  43. <img src="{:captcha_src()}" id="vcode">
  44. </div>
  45. </div>
  46. <div class="form-group">
  47. <div class="col-sm-offset-2 col-sm-10">
  48. <button type="submit" class="btn btn-success">用户登录</button>
  49. </div>
  50. </div>
  51. </form>
  52. </div>
  53. </div>
  54. </div>
  55. <script src="/static/js/jquery.min.js"></script>
  56. <script src="/static/index/js/bootstrap.js"></script>
  57. <script>
  58. // 点击更新验证码图片
  59. $('#vcode').click(function () {
  60. let src = $(this).attr('src') + '?vt=' + Math.random();
  61. $(this).attr('src',src);
  62. })
  63. </script>
  64. </body>
  65. </html>