2025-11-21 14:49:09 +08:00

192 lines
4.6 KiB
PHP

<?php
namespace app;
use app\dict\common\ChannelDict;
/**
* Class Request
* @package app
*/
// 应用请求对象类
class Request extends \think\Request
{
//认证信息
protected static $auth_info = [];
/**
* 获取请求参数
* @param array $params
* @param bool $filter
* @return array
*/
public function params(array $params, bool $filter = true): array
{
$input = [];
// $filter_rule = $filter ? 'strip_tags' : '';
$filter_rule = '';
foreach ($params as $param) {
$key = $param[0];
// 解析name
if (strpos($key, '/')) {
[$name, $type] = explode('/', $key);
}else{
$name = $key;
}
$default = $param[1];
$item_filter = $param[2] ?? $filter;
$input[$key] = $this->paramFilter($this->param($key, $default, $filter_rule ?? ''), $item_filter);
//过滤后产生空字符串,按照默认值
if($input[$name] === '')
{
$input[$name] = $default;
}
}
return $input;
}
/**
* 参数过滤
* @param $param
* @param bool $filter
* @return array|string|string[]|null
*/
public function paramFilter($param, bool $filter = true)
{
if (!$param || !$filter || !is_string($param)) {
return $param;
}
// 过滤危险标签
$filter_rule = [
"/<(\\/?)(script|iframe|frame|style|html|body|title|link|meta|alert|font|object|\\?|\\%)([^>]*?)>/isU",
"/(<[^>]*?)on[a-zA-Z]+\s*=[\s\"'][^\"']*?([\s\"'][^>]*?>)/isU",
"/\\b(select|join|where|drop|like|modify|rename|insert|update|table|database|alter|truncate|\'|\/\*|\.\.\/|\.\/|union|into|load_file|outfile)\\b/is"
];
$replace = [
'', // 移除整个危险标签
'$1$2', // 仅移除 onxxx 属性,保留标签
''
];
return preg_replace($filter_rule, $replace, $param);
}
/**
* 获取登录用户的uid
* @param int $uid
* @return int|mixed|void
*/
public function uid(int $uid = 0)
{
if ($uid > 0) {
static::$auth_info['uid'] = $uid;
} else {
return static::$auth_info['uid'] ?? 0;
}
}
/**
* 获取登录会员的id
*/
public function memberId(int $member_id = 0)
{
if ($member_id > 0) {
static::$auth_info['member_id'] = $member_id;
} else {
return static::$auth_info['member_id'] ?? 0;
}
}
/**
* 用户账号
* @param string $username
* @return int|mixed
*/
public function username(string $username = '')
{
if (!empty($username)) {
static::$auth_info['username'] = $username;
return $username;
} else {
return static::$auth_info['username'] ?? '';
}
}
/**
* 定义站点类型
* @param string $app_type
* @return mixed|string
*/
public function appType(string $app_type = ''){
if (!empty($app_type)) {
static::$auth_info['app_type'] = $app_type;
return $app_type;
} else {
return static::$auth_info['app_type'] ?? '';
}
}
/**
* 获取管理端token
* @return array|string|null
*/
public function adminToken(){
return $this->header(system_name('admin_token_name'));
}
/**
* 获取会员token
* @return array|string|null
*/
public function apiToken(){
return $this->header(system_name('api_token_name'));
}
/**
* 获取场景
* @return array|string
*/
public function getChannel(){
return $this->header(system_name('channel_name'), ChannelDict::H5);
}
/**
* get传参追加值
* @param $data
* @return void
*/
public function pushGet($data){
$param = $this->get();
$this->withGet(array_merge($param, $data));
}
/**
* header传参追加值
* @param $data
* @return void
*/
public function pushHeader($data){
$param = $this->header();
$this->withHeader(array_merge($param, $data));
}
/**
* 授权信息
* @param $key
* @param $value
* @return mixed|string|void
*/
public function auth($key, $value = ''){
if (!empty($value)) {
static::$auth_info[$key] = $value;
} else {
return static::$auth_info[$key] ?? '';
}
}
}