AdminBaseController.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. <?php
  2. declare (strict_types = 1);
  3. namespace app;
  4. use think\App;
  5. use think\exception\ValidateException;
  6. use think\Validate;
  7. use think\facade\Db;
  8. use think\cache\driver\Redis;
  9. /**
  10. * 控制器基础类
  11. */
  12. abstract class AdminBaseController
  13. {
  14. /**
  15. * Request实例
  16. * @var \think\Request
  17. */
  18. protected $request;
  19. /**
  20. * 应用实例
  21. * @var \think\App
  22. */
  23. protected $app;
  24. /**
  25. * 是否批量验证
  26. * @var bool
  27. */
  28. protected $batchValidate = false;
  29. /**
  30. * 控制器中间件
  31. * @var array
  32. */
  33. protected $middleware = [];
  34. /**
  35. * 无需登录鉴权的方法名
  36. * @var array
  37. */
  38. protected $noNeedLogin = [];
  39. /**
  40. * redis对象
  41. * @var array
  42. */
  43. protected $redis;
  44. private $token;
  45. /**
  46. * 构造方法
  47. * @access public
  48. * @param App $app 应用对象
  49. */
  50. public function __construct(App $app)
  51. {
  52. $this->app = $app;
  53. $this->request = $this->app->request;
  54. $this->redis = new Redis();
  55. // 控制器初始化
  56. $this->initialize();
  57. }
  58. // 初始化
  59. protected function initialize()
  60. {
  61. //noNeedLogin全部转换小写
  62. foreach ($this->noNeedLogin as &$action) {
  63. $action = strtolower($action);
  64. }
  65. //验证需要鉴权的方法名
  66. $callMethodName = strtolower($this->request->action());
  67. if (!in_array($callMethodName, $this->noNeedLogin)) {
  68. $userToken = Db::table('tb_admin_token')
  69. ->where(['token' => $this->request->header('token')])
  70. ->where('expired_at', '>', time())
  71. ->find();
  72. if (!$userToken) {
  73. $this->fail(401, '请先登录后再操作');
  74. }
  75. $this->token = $this->request->header('token');
  76. }
  77. }
  78. protected function getUser()
  79. {
  80. $data = Db::table('tb_admin_token')
  81. ->where(['token' => $this->token])
  82. ->find();
  83. return (object) $data;
  84. }
  85. /**
  86. * 验证数据
  87. * @access protected
  88. * @param array $data 数据
  89. * @param string|array $validate 验证器名或者验证规则数组
  90. * @param array $message 提示信息
  91. * @param bool $batch 是否批量验证
  92. * @return array|string|true
  93. * @throws ValidateException
  94. */
  95. protected function validate(array $data, $validate, array $message = [], bool $batch = false)
  96. {
  97. if (is_array($validate)) {
  98. $v = new Validate();
  99. $v->rule($validate);
  100. } else {
  101. if (strpos($validate, '.')) {
  102. // 支持场景
  103. [$validate, $scene] = explode('.', $validate);
  104. }
  105. $class = false !== strpos($validate, '\\') ? $validate : $this->app->parseClass('validate', $validate);
  106. $v = new $class();
  107. if (!empty($scene)) {
  108. $v->scene($scene);
  109. }
  110. }
  111. $v->message($message);
  112. // 是否批量验证
  113. if ($batch || $this->batchValidate) {
  114. $v->batch(true);
  115. }
  116. return $v->failException(true)->check($data);
  117. }
  118. protected function success($msg, $data)
  119. {
  120. echo json_encode([
  121. 'code' => 200,
  122. 'msg' => $msg,
  123. 'data' => $data,
  124. ]);
  125. exit();
  126. }
  127. protected function fail($code, $msg)
  128. {
  129. echo json_encode([
  130. 'code' => $code,
  131. 'msg' => $msg,
  132. ]);
  133. exit();
  134. }
  135. //发送TCP消息
  136. protected function sendTcpMessage()
  137. {
  138. }
  139. }