原文地址:http://blog.csdn.net/self_realian/article/details/75214922

模板变量输出、替换和赋值

我们看一下文件编译的结果,我们知道我们现在写的是一个html文件,但是我们当前的系统是php,我们的模板最终也会编译成php文件执行,输出我们想要的结果,它编译的文件在runtime/temp目录下,找到对应的编译文件

首先我们看见,如果我们在系统中没有定义“THINK_PATH”这个变量,就会退出,说明我们当前这个文件必须在ThinkPHP环境下才能执行,这样它就不呢直接访问我们的temp文件,来获取我们文件中的内容,上边的那个其实就是一个安全机制。紧接着就是我们编写的代码了。我们会看到  它把包裹变量的两个花括号变成了<?php   和 ?>.也就是说我们在模板中输出变量的花括号最终会被编译成PHP的<?php  和  ?>,然后里边是echo 出变量,这就是模板的执行流程。它首先让我们在html文件中编写正常的html,通过固定的标签来标记我们变量的开始和结束,之后在我们执行过程中,它会生成缓存或编译文件,最终我们程序其实是执行了那个编译文件。现在我们看一下,为什么我们使用花括号就能输出变量,能否使用其它的标记呢?

我们来看一下thinkphp的配置文件(convention.php),找到模板配置部分,直接拷贝到应用配置文件中

这两个就是定义模板的开始和结束的标记的,当然我们也可以改,但是不建议改,如果小伙伴们想试一下也是可以的,我这里就不截图了。(注意我们输出的变量和花括号中间是不能有空格的,否则不能正常输出变量的值)

接下来我们看看,还能使用哪些方式能对页面的变量赋值。我们知道我们可以通过fetch()的第二个参数赋值。第二种方式,之前也介绍过,可以通过$this->assign()的方法。第三种方法,是通过$this->view获取view对象,然后给view对象设置属性值,比如:$this->view->name =‘chen’

在ThibPHP5.0.4之后,在think下的view类中,为我们提供了一个静态方法,我们可以直接通过静态方法,来对我们的页面赋值

这几种给模板中分配变量的方式,同时可用。系统会将这四种方式传递的变量进行合并,统一向我们的页面中进行分配,这样我们就可以在我们的页面中使用这些值

我们知道,通过fetch()函数,我们可以传递第三个参数,第三个参数的key就是我们要替换的字符串,值就是我们替换之后把的内容

另外,我们可以通过修改配置文件中,进行修改,来统一的向我们所有的模板中进行一个变量替换的配置,我们依然打开convention.php

另外,我们可以通过修改配置文件中,进行修改,来统一的向我们所有的模板中进行一个变量替换的配置,我们依然打开convention.php

将它复制到应用配置文件中,然后进行修改

比如我想将 ‘__123__’修改成‘__一二三__’

可以这样配置

然后我们可以回到模板中直接进行输出

系统还提供了一些默认的字符串替换,比如__URL__(得到的是当前模块名和当前控制器名)、__STATIC__(得到的是/static也就是根下的static目录即public/static目录),thinkphp是一个单入口文件,所有的请求都会落到public/index.php,在我们安装好这个框架之后,public就会默认有一个static目录,我们之前介绍目录的时候介绍过,这个static目录是用来放静态文件的。我们在模板中经常会使用到static下的一些文件,比如说:css样式,js代码,图片等。我们就可以通过__STATIC__来代替/static目录。还有__JS__,它表示的是/static/js这个目录。__ROOT__,它表示的是框架所在的目录下的public目录,在我这里是/ThinkPHP5.0/public。__CSS__它表示的是/static/css目录

比如我们现在想使index.html这个页面变成红色,我们再static/css目录下写一个style.css文件,然后在index.html中引入该样式

当我们使用__CSS__这种系统定义好的常量,会给我们提供很大的方便。比如说我们不想将我们的样式放在public/static目录,我们只想直接放在根目录,也就是public目录下,比如说创建一个front目录,里边全放前端的样式。当我们修改了样式的位置之后,如果我们使用的是之前的那种传统的引入样式的方法,我们就需要修改我们整个项目的样式的路径,但是我们使用了__CSS__这种之后,我们只需要在我们的当前模块配置文件中进行修改即可,比如我们现在修改__CSS__默认对应的目录

这样我们在模板中使用__CSS__对应的就是/front/css目录。通过简单的配置就能改变项目中所有样式相关的路径,这对我们后期的维护是相当方便的。这些默认的替换在thinkphp/library/think/View.php

注意配置的读取顺序,也就是优先级。最先读取的是框架的默认配置,如果我们在对应的模块中对这些配置进行了修改,那么它最终会使用模块中的配置

《TP5.0学习笔记---模板变量输出、替换和赋值篇》的更多相关文章

  1. 简单物联网:外网访问内网路由器下树莓派Flask服务器

    最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...

  2. 利用ssh反向代理以及autossh实现从外网连接内网服务器

    前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...

  3. 外网访问内网Docker容器

    外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...

  4. 外网访问内网SpringBoot

    外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...

  5. 外网访问内网Elasticsearch WEB

    外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...

  6. 怎样从外网访问内网Rails

    外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...

  7. 怎样从外网访问内网Memcached数据库

    外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...

  8. 怎样从外网访问内网CouchDB数据库

    外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...

  9. 怎样从外网访问内网DB2数据库

    外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...

  10. 怎样从外网访问内网OpenLDAP数据库

    外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...

随机推荐

  1. Theano 报错:No suitable SharedVariable constructor could be found. Are you sure all kwargs are supported? We do not support the parameter dtype or type

    当Theano报错:No suitable SharedVariable constructor could be found. Are you sure all kwargs are support ...

  2. jQuery 源码分析(二) 入口模块

    jQuery返回的对象本质上是一个JavaScript对象,而入口模块则可以保存对应的节点的引用,然后供其它模块操作 我们创建jQuery对象时可以给jQuery传递各种不同的选择器,如下: fals ...

  3. Kafka界面管理工具-kafkamanager

    在上一篇文章<Linux安装Kafka>中,已经介绍了如何在Linux安装Kafka,以及Kafka的启动/关闭和创建发话题并产生消息和消费消息.这篇文章就介绍介绍Kafka管理界面(ka ...

  4. 解决 Visual Studio 符号加载不完全问题

    解决 Visual Studio 符号加载不完全问题 工具 - 选项 - 搜索 "符号" - 选上服务器 | 加载所有符号, 之后符号就会显示完全

  5. php 5.5 编译安装

    链接:https://pan.baidu.com/s/1Iy5kdugWqmvtsrYG0WYAdA 提取码:knk9 上面的链接 php5.5.8 编译安装的包 ./configure  --pre ...

  6. C# 改变控制台背景颜色

    之前查找静态构造函数相关的问题无意间碰到的一个问题.改变控制台的背景颜色. static void Main(string[] args) { //设置绿色 Console.BackgroundCol ...

  7. Winform中对xml文件进行保存时空白节点自动换行问题的解决

    场景 Winform中自定义xml配置文件后对节点进行读取与写入: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10053213 ...

  8. python time包中的time.time()和time.clock()的区别

    在统计python代码 执行速度时要使用到time包,在查找相关函数时有time.time()和time.clock()两个函数可供选择.而两者是有区别的: cpu 的运行机制:cpu是多任务的,例如 ...

  9. IOS疯狂基础之观察者模式

    转自:http://blog.csdn.net/wudizhukk/article/details/8981535 一.KVO Key-Value Observing,它提供一种机制,当指定的对象的属 ...

  10. 车间如何数字化?MES系统来助力

    对于生产过程复杂多变的离散制造企业而言,面临重重考验:生产作业计划频繁变更,制造工艺复杂,在生产过程中的临时插单.材料短缺等现象.通过MES制造执行管理解决方案,搭建协同管理平台,加强控制力.执行力和 ...