最近在使用ThinkPHP5 写项目,项目中涉及到权限管理,如果用户没有这个权限,就不显示这个div。在全局封装好了一个函数
check_permission($permission_key): bool{}
在view.html里面书写的话 需要这么写
{if check_permission('order-delivery')}
订单发货
{/if}
想换一种思路实现以上代码,于是自己研究了一下模板标签拓展,拓展类库如下:
class HasPermission extends TagLib
{
protected $tags = [
//闭合标签,默认为不闭合
'open' => ['attr' => 'key', 'close' => 0],
'close' => ['attr' => 'key', 'close' => 1],
];
public function tagClose($tag, $content)
{
$parse = '<?php if (has_permission("' . $tag['key']
. '")) {?>' . $content . '<?php } ?>';
return $parse;
}
}
需要在/config/template.php中的taglib_pre_load中加入HasPermission
use app\index\taglib\HasPermission;
return [
// 模板引擎类型 支持 php think 支持扩展
'type' => 'Think',
// 模板路径
'view_path' => '',
// 模板后缀
'view_suffix' => 'html',
// 模板文件名分隔符
'view_depr' => DIRECTORY_SEPARATOR,
// 模板引擎普通标签开始标记
'tpl_begin' => '{',
// 模板引擎普通标签结束标记
'tpl_end' => '}',
// 标签库标签开始标记
'taglib_begin' => '{',
// 标签库标签结束标记
'taglib_end' => '}',
'tpl_replace_string' => [
// 静态文件路径
'__STATIC__' => '/static',
'__JS__' => '/static/javascript',
],
'taglib_pre_load' => implode(',', [
HasPermission::class,
]),
];
这里我要吐槽一下ThinkPHP5的设计,为什么taglib_pre_load 是一个逗号分隔开的字符串,而不是优雅的数组
在view.html中实现这个方法示例:
{haspermission:close key="order-delivery"}
订单发货
{/haspermission:close}
写完之后发现,其实好像没少写多少代码,笑。。。