homepagePHP/docs/Helper.md

286 lines
9.3 KiB
Markdown
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

### QsPage
开启关闭下拉风格, 默认采用下拉风格
QsPage分数字分页风格和下拉分页风格两种风格对分页有不同的需求。
1. 数字分页风格限制了不能访问超出最大页数的页面,否则仅返回最大页(需求场景:用户删除最大页的所有数据后,程序会刷新停留在当前页,此时用户会看到是空数据页,会产生已经没有数据的误解。)。
2. 下拉风格页没有访问超出最大页数的限制,否则下拉程序会不断加载最大页的内容,导致无限加载相同的数据。
开启下拉风格
```
//设置默认风格(不显式设置得默认值)
QsPage::setDefaultPullStyle(true)
//按需求重置风格
$page = new QsPage($total, $per_page_rows);
$page->setPullStyle(false)
```
### 全局函数
#### fork
框架如果直接用pcntl_fork创建子进程时进行数据库操作时会出错直接使用该函数可避免这些问题.
#### isUrl
验证是否合法的url
#### normalizeRelativePath
将相对路径转成绝对路径
#### removeFunkyWhiteSpace
清除一些奇怪无法看到的空格
#### getRelativePath
计算$b相对于$a的相对路径如$b = /a/b/c $a = /a/d/f 那么返回 ../d/f
#### base64_url_encode
对url进行base64转码转码前会先对+ /,进行处理
#### base64_url_decode
将base64转回url与base64_url_encode搭配使用
#### showThumbUrl
```php
参数
$file_id 存放在qs_file_pic表的图片id
$prefix 缩略图的前缀,与裁图插件的前缀相对应
$replace_img 如获取图片失败适应该指定的图片url代替
返回值
图片url地址
该函数一般用于获取裁剪插件所裁出来的本地缩略图。
如果$file_id对应的是用seed功能填充出来的图片还可以依据前缀获取到所希望图片的大小自动构造相同的大小的图片url。
使用该函数即可在不做任何代码改动的情况下完好的作用在本地图片上传和填充伪造图片的两种场景。
```
#### showFileUrl
```blade
参数
$file_id 存放在qs_file_pic表的文件id若为url,则返回该url
$default_file 默认文件的URL地址
返回值
文件的URL地址
该函数一般用于展示数据库存储文件的URL地址。
如果上传策略的security设置成true
第三方组件包可以注册 get_auth_url事件来自定义文件的临时授权访问地址
$param = [
'file_ent' => $file_pic_ent, //qs_file_pic 记录
'timeout' => 60 //授权链接过期时间
];
\Think\Hook::listen('get_auth_url', $param);
返回 $params['auth_url'] 即为临时授权链接
```
#### showImg
```blade
参数
$file_id 存放在qs_file_pic表的图片id若为url,则返回该url
返回值
图片的URL地址
该函数一般用于展示数据库存储图片的URL地址若不存在图片则返回系统配置默认封面。
```
#### cleanRbacKey
清空INJECT_RBAC标识key的session值
#### uniquePageData
分页去重辅助函数
```php
$member_list = D('Person')->getList($map, $page, $per_page);
//第一个参数,数据缓存唯一标识
//第二个参数,数据唯一键值
//第三个参数,第几页
//第四个参数,去重数据
$member_list = uniquePageData('Person->getList', 'id', $page, $member_list);
```
#### D
```blade
实例化模型类
参数
$name 模型名称,为''则实例化Think\Model
$layer 模型层名称,为''则使用DEFAULT_M_LAYER值
$close_type 关闭类型默认为false可通过\Qscmf\Lib\DBCont::getCloseTypeList()查看目前支持的类型
```
```php
// 使用技巧
// 需要关闭所有的数据库连接(以下写法等效)
D('','', true);
D('','', \Qscmf\Lib\DBCont::CLOSE_TYPE_CONNECTION);
// 若修改了数据库连接的配置,要使全部模型生效,则需要同时关闭数据库连接和清除已实例化的模型
D('','', \Qscmf\Lib\DBCont::CLOSE_TYPE_ALL);
```
#### getAreaFullCname1ByID
```blade
根据地区id获取其中文全名称
参数
$id 地区id
$model 模型层名称默认为AreaV需要检查模型层对应的数据表是否存在
$field 字段名称默认为full_cname1
```
#### getAllAreaIdsWithMultiPids
```blade
根据多个地区id获取其下属的所有地区
参数
$ids 地区id
$model 模型层名称默认为AreaV需要检查模型层对应的数据表是否存在
$max_level 最大级数据默认为区级即3省级为1市级为2区级为3
$need_exist 是否只需要模型层对应数据表存在的数据默认为true如id为123的城市并不存在若该值为true返回结果并不包括它若该值为false返回结果则包括
$cache 开启数据库缓存,默认为空,即不开启(可支持传数组、字符串、数字)
cache参数说明若需要开启缓存且缓存60秒则传数组[true,60,'']或者字符串'60'或者数字60。
```
#### parseModelClsName
```blade
解析模型类的类名
参数
$name string 资源地址
$layer string 模型层名称默认为C('DEFAULT_M_LAYER')
```
```php
// 实例化一个模型类ConfigModel
$ref_model_cls = parseModelClsName('Config');
$ref_model_cls = new $ref_model_cls('Config');
$ref_model_cls->getOne();
```
#### deleteEmptyDirectory
```text
递归删除目录下的空目录
参数
$directory string 目录路径
$preserve bool 是否保留本身目录默认为false不保留
```
#### filterItemsByAuthNode
+ 说明
根据权限点过滤数组元素
| 参数 | 说明 | 类型 | 必填 | 默认值 |
| :------- | :----------------------------- | ---- | ---- | :----- |
| check_items | 内容 | array | 是 | |
| check_items.auth_node | 权限点,格式为 模块.控制器.方法名 | string I array | 否 | |
若auth_node存在多个值支持配置不同逻辑logic值为and或者or判断是否显示默认为and
and用户拥有全部权限则显示格式为
['node' => ['模块.控制器.方法名','模块.控制器.方法名'], 'logic' => 'and']
or用户一个权限都没有则隐藏格式为
['node' => ['模块.控制器.方法名','模块.控制器.方法名'], 'logic' => 'or']
#### filterOneItemByAuthNode
+ 说明
根据权限点过滤内容
| 参数 | 说明 | 类型 | 必填 | 默认值 |
| :------- | :----------------------------- | ---- | ---- | :----- |
| item | 内容 | string | 是 | |
| item_auth_node | 权限点,格式为 模块.控制器.方法名 | string I array | 否 | |
若item_auth_node存在多个值支持配置不同逻辑logic值为and或者or判断是否显示默认为and
and用户拥有全部权限则显示格式为
['node' => ['模块.控制器.方法名','模块.控制器.方法名'], 'logic' => 'and']
or用户一个权限都没有则隐藏格式为
['node' => ['模块.控制器.方法名','模块.控制器.方法名'], 'logic' => 'or']
#### isJson
判断字符串是否为json格式
#### S
缓存操作便捷函数, 见[[数据缓存 - ThinkPHP3.2完全开发手册](http://document.thinkphp.cn/manual_3_2.html#data_cache)]
在此基础上增加了第四个参数是否保留缓存的过期时间。默认为false开启的话设置true开启后如果key有未过期则保留当前的过期时间不做刷新处理否则将expire作为新的过期时间设置。
#### getNid
```blade
获取node id用于后台高亮菜单
例如设置导入数据页面的高亮菜单
参数
$module_name string 模块名默认为常量值MODULE_NAME即当前模块
$controller_name string 控制器名默认为常量值CONTROLLER_NAME即当前控制器
$action_name string 方法名默认为常量值ACTION_NAME即当前方法
```
#### extractParamsByUrl
```blade
提取url参数
参数
$url string url
$filter_empty bool 是否过滤空值true 是 false 否默认为false
```
#### combineOssUrlImgOpt
```blade
拼接阿里云oss图片处理参数
参数
$url string url
$opt string 图片处理参数,如'x-oss-process=image/resize,w_100'或者'resize,w_100'
```
用例
```php
$url1 = 'https://quansi-test.oss-cn-shenzhen.aliyuncs.com/Uploads/image/20220721/62d91a961c13a.heic';
$url2 = 'https://quansi-test.oss-cn-shenzhen.aliyuncs.com/Uploads/image/20220721/62d91a961c13a.heic?a=1';
$url3 = 'https://quansi-test.oss-cn-shenzhen.aliyuncs.com/Uploads/image/20220721/62d91a961c13a.heic?x-oss-process=image/format,jpg';
$url4 = 'https://quansi-test.oss-cn-shenzhen.aliyuncs.com/Uploads/image/20220721/62d91a961c13a.heic?a=1&x-oss-process=image/format,jpg';
$opt = 'x-oss-process=image/resize,w_100';
dd(
combineOssUrlImgOpt($url1,$opt)
,combineOssUrlImgOpt($url2,$opt)
,combineOssUrlImgOpt($url3,$opt)
,combineOssUrlImgOpt($url4,$opt)
);
// 输出
// "https://quansi-test.oss-cn-shenzhen.aliyuncs.com/Uploads/image/20220721/62d91a961c13a.heic?x-oss-process=image/resize,w_100"
// "https://quansi-test.oss-cn-shenzhen.aliyuncs.com/Uploads/image/20220721/62d91a961c13a.heic?a=1&x-oss-process=image/resize,w_100"
// "https://quansi-test.oss-cn-shenzhen.aliyuncs.com/Uploads/image/20220721/62d91a961c13a.heic?x-oss-process=image/format,jpg/resize,w_100"
// "https://quansi-test.oss-cn-shenzhen.aliyuncs.com/Uploads/image/20220721/62d91a961c13a.heic?a=1&x-oss-process=image/format,jpg/resize,w_100"
```