原文地址: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. 北京麒麟会GITC

    分享ppt:https://pan.baidu.com/s/1Aerqtbi8VpMiFGhfEMUtPQ http://bj.thegitc.com/#meeting-agenda

  2. Blazor应用程序基于角色的授权

    原文:https://chrissainty.com/securing-your-blazor-apps-configuring-role-based-authorization-with-clien ...

  3. APS.NET MVC + EF (06)---模型

    在实际开发中,模型往往被划分为视图模型和业务模型两部分,视图模型靠近视图,业务模型靠近业务,但是在具体编码上,它们之间并不是隔离的. 6.1 视图模型和业务模型 模型大多数时候都是用来传递数据的.然而 ...

  4. SQL和T-SQL之间的区别

    对于SQL,在我的上一篇博客中<何谓SQL Server数据库?与Access数据库 有什么区别>里面,已经着重说明了SQL作为访问和处理数据库的标准的计算机语言,所以这里就不做过多强调. ...

  5. easyui高级控件

    开发模式 1. 美工(ui工程师:出一个项目模型) java工程师:将原有的html转成jsp,动态展示数据 缺点: 客户需要调节前端的展示效果 解决:由美工去重新排版,重新选色.2.前后端分离 美工 ...

  6. C++优先队列例子

    #pragma GCC optimize(3) #include <bits/stdc++.h> #define N 105 using namespace std; struct Nod ...

  7. fetch和XMLHttpRequest

    fetch和XMLHttpRequest 如果看网上的fetch教程,会首先对比XMLHttpRequest和fetch的优劣,然后引出一堆看了很快会忘记的内容(本人记性不好).因此,我写一篇关于fe ...

  8. 简单聊聊实时视频rtmp

    背景: 由于经常接触实时视频, 对实时视频略有了解. 实时视频是将视频流实时上传到服务器端进行解析, 由RTMP服务器处理. RTMP 服务器 自己动手搭建一个rtmp, 本文在 Linux环境中搭建 ...

  9. JOIN中的外连接(external join)

    外连接: ---外连接并不要求连接的两表的每一条记录在对方表中都有一条匹配记录.要保留所有记录(甚至这条记录没有匹配的记录也要保留)的表成为保留表.外连接可以一句连接表保 留左表,右表和全部表的行二进 ...

  10. mysql数据库之忘记root密码

    1.  vi /etc/my.cnf,在[mysqld]中添加 skip-grant-tables 例如: [mysqld] skip-grant-tables datadir=/var/lib/my ...