Request.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. <?php
  2. namespace app;
  3. use app\dict\common\ChannelDict;
  4. use app\service\core\site\CoreSiteService;
  5. /**
  6. * Class Request
  7. * @package app
  8. */
  9. // 应用请求对象类
  10. class Request extends \think\Request
  11. {
  12. //认证信息
  13. protected static $auth_info = [];
  14. protected static $site_id = 0;
  15. /**
  16. * 获取请求参数
  17. * @param array $params
  18. * @param bool $filter
  19. * @return array
  20. */
  21. public function params(array $params, bool $filter = true): array
  22. {
  23. $input = [];
  24. // $filter_rule = $filter ? 'strip_tags' : '';
  25. $filter_rule = '';
  26. foreach ($params as $param) {
  27. $key = $param[0];
  28. // 解析name
  29. if (strpos($key, '/')) {
  30. [$name, $type] = explode('/', $key);
  31. }else{
  32. $name = $key;
  33. }
  34. $default = $param[1];
  35. $item_filter = $param[2] ?? $filter;
  36. $input[$key] = $this->paramFilter($this->param($key, $default, $filter_rule ?? ''), $item_filter);
  37. //过滤后产生空字符串,按照默认值
  38. if($input[$name] === '')
  39. {
  40. $input[$name] = $default;
  41. }
  42. }
  43. return $input;
  44. }
  45. /**
  46. * 参数过滤
  47. * @param $param
  48. * @param bool $filter
  49. * @return array|string|string[]|null
  50. */
  51. public function paramFilter($param, bool $filter = true)
  52. {
  53. if (!$param || !$filter || !is_string($param)) return $param;
  54. // 把数据过滤
  55. $filter_rule = [
  56. "/<(\\/?)(script|i?frame|style|html|body|title|link|metaf|alert|font|object|\\?|\\%)([^>]*?)>/isU",
  57. "/(<[^>]*)on[a-zA-Z]+\s*=([^>]*>)/isU",
  58. "/\\b(select|join|where|drop|like|modify|rename|insert|update|table|database|alter|truncate|\'|\/\*|\.\.\/|\.\/|union|into|load_file|outfile)\\b/is"
  59. ];
  60. return preg_replace($filter_rule, '', $param);
  61. }
  62. /**
  63. * 获取登录用户的uid
  64. * @param int $uid
  65. * @return int|mixed|void
  66. */
  67. public function uid(int $uid = 0)
  68. {
  69. if ($uid > 0) {
  70. static::$auth_info['uid'] = $uid;
  71. } else {
  72. return static::$auth_info['uid'] ?? 0;
  73. }
  74. }
  75. /**
  76. * 获取登录会员的id
  77. */
  78. public function memberId(int $member_id = 0)
  79. {
  80. if ($member_id > 0) {
  81. static::$auth_info['member_id'] = $member_id;
  82. } else {
  83. return static::$auth_info['member_id'] ?? 0;
  84. }
  85. }
  86. /**
  87. * 站点id
  88. * @param int|string|null $site_id
  89. * @return int
  90. */
  91. public function siteId(int|string|null $site_id = 0)
  92. {
  93. if ($site_id > 0) {
  94. static::$site_id = (int)$site_id;
  95. return $site_id;
  96. } else {
  97. return static::$site_id ?? $this->defaultSiteId();
  98. }
  99. }
  100. /**
  101. * 用户账号
  102. * @param string $username
  103. * @return int|mixed
  104. */
  105. public function username(string $username = '')
  106. {
  107. if (!empty($username)) {
  108. static::$auth_info['username'] = $username;
  109. return $username;
  110. } else {
  111. return static::$auth_info['username'] ?? '';
  112. }
  113. }
  114. /**
  115. * 定义站点类型
  116. * @param string $app_type
  117. * @return mixed|string
  118. */
  119. public function appType(string $app_type = ''){
  120. if (!empty($app_type)) {
  121. static::$auth_info['app_type'] = $app_type;
  122. return $app_type;
  123. } else {
  124. return static::$auth_info['app_type'] ?? '';
  125. }
  126. }
  127. /**
  128. * 获取管理端token
  129. * @return array|string|null
  130. */
  131. public function adminToken(){
  132. return $this->header(system_name('admin_token_name'));
  133. }
  134. /**
  135. * 获取会员token
  136. * @return array|string|null
  137. */
  138. public function apiToken(){
  139. return $this->header(system_name('api_token_name'));
  140. }
  141. /**
  142. * 平台site_id
  143. * @return array|string|null
  144. */
  145. public function adminSiteId(){
  146. return $this->header(system_name('admin_site_id_name'));
  147. }
  148. /**
  149. * 客户端site_id
  150. * @return array|string|null
  151. */
  152. public function apiSiteId(){
  153. return 0;
  154. }
  155. /**
  156. * 获取场景
  157. * @return array|string
  158. */
  159. public function getChannel(){
  160. return $this->header(system_name('channel_name'), ChannelDict::H5);
  161. }
  162. /**
  163. * 获取默认站点
  164. * @return int
  165. */
  166. public function defaultSiteId(){
  167. return 0;
  168. }
  169. /**
  170. * get传参追加值
  171. * @param $data
  172. * @return void
  173. */
  174. public function pushGet($data){
  175. $param = $this->get();
  176. $this->withGet(array_merge($param, $data));
  177. }
  178. /**
  179. * header传参追加值
  180. * @param $data
  181. * @return void
  182. */
  183. public function pushHeader($data){
  184. $param = $this->header();
  185. $this->withHeader(array_merge($param, $data));
  186. }
  187. /**
  188. * 授权信息
  189. * @param $key
  190. * @param $value
  191. * @return mixed|string|void
  192. */
  193. public function auth($key, $value = ''){
  194. if (!empty($value)) {
  195. static::$auth_info[$key] = $value;
  196. } else {
  197. return static::$auth_info[$key] ?? '';
  198. }
  199. }
  200. }