ThinkPhP中的模板常量替换机制

在ThinkPHP开发中,为了简化复杂路径,可以利用模板常量替换机制。系统提供了如__MODULE__、__CONTROLLER__、__ACTION__、__PUBLIC__和__SELF__等常量,用于表示不同级别的路由。在ContentReplaceBehavior类中,通过配置TMPL_PARSE_STRING数组,自定义路径替换。这使得在HTML中直接引用路径变得更加便捷。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在实际开发的时候会出现一个这样的问题:在引入图片、css、js文件的时候,往往需要写一些比较复杂的路径,所以这个时候我们比较希望能有一些特殊的常量将很长很复杂的路径简单化,这个时候可以考虑使用模版常量替换的机制。

 

在ThinkPHP中系统默认给我们提供以下几个常用的模版常量

__MODULE__:表示从域名后面开始一直到分组名结束的路由

__CONTROLLER__:表示从域名后面开始一直到控制器结束的路由

__ACTION__:表示从域名后面开始一直到方法名结束的路由

__PUBLIC__:站点根目录下的Public目录的路由

__SELF__:表示从域名后面开始一直到路由的最后(如果没有参数,则__SELF__和__ACTION__所表达的内容是一样的)


其中ThinkPhp中关于模板产量的代码在行为文件中路径如下

ThinkPHP\Library\Behavior\ContentReplaceBehavior.class.php

class ContentReplaceBehavior {

    // 行为扩展的执行入口必须是run
    public function run(&$content){
        $content = $this->templateContentReplace($content);
    }

    /**
     * 模板内容替换
     * @access protected
     * @param string $content 模板内容
     * @return string
     */
    protected function templateContentReplace($content) {
        // 系统默认的特殊变量替换
        $replace =  array(
            '__ROOT__'      =>  __ROOT__,       // 当前网站地址
            '__APP__'       =>  __APP__,        // 当前应用地址
            '__MODULE__'    =>  __MODULE__,
            '__ACTION__'    =>  __ACTION__,     // 当前操作地址
            '__SELF__'      =>  htmlentities(__SELF__),       // 当前页面地址
            '__CONTROLLER__'=>  __CONTROLLER__,
            '__URL__'       =>  __CONTROLLER__,
            '__PUBLIC__'    =>  __ROOT__.'/Public',// 站点公共目录
        );
        // 允许用户自定义模板的字符串替换
        if(is_array(C('TMPL_PARSE_STRING')) )
            $replace =  array_merge($replace,C('TMPL_PARSE_STRING'));
        $content = str_replace(array_keys($replace),array_values($replace),$content);
        return $content;
    }

}

根据代码可知如果我们可以通过在配置文件(分组或者应用级别)中定义数组名为TMPL_PARSE_STRING

并添加我们想要添加的路径。


使用的话可以在html中直接使用。


以上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值