php 自定义模板标签,ThinkPHP5 自定义模板标签

最近在使用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}

写完之后发现,其实好像没少写多少代码,笑。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值