《TP5.0学习笔记---模板变量输出、替换和赋值篇》
原文地址: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学习笔记---模板变量输出、替换和赋值篇》的更多相关文章
- 简单物联网:外网访问内网路由器下树莓派Flask服务器
最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...
- 利用ssh反向代理以及autossh实现从外网连接内网服务器
前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...
- 外网访问内网Docker容器
外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...
- 外网访问内网SpringBoot
外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...
- 外网访问内网Elasticsearch WEB
外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...
- 怎样从外网访问内网Rails
外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...
- 怎样从外网访问内网Memcached数据库
外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...
- 怎样从外网访问内网CouchDB数据库
外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...
- 怎样从外网访问内网DB2数据库
外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...
- 怎样从外网访问内网OpenLDAP数据库
外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...
随机推荐
- class net.sf.cglib.core.DebuggingClassWriter overrides final method visit
在使用CGLIB进行动态代理的时候,报了[java.lang.VerifyError: class net.sf.cglib.core.DebuggingClassWriter overrides f ...
- git同步本地数据到github——第一次使用和以后使用
git作为版本控制工具十分的好用,但是在使用的过程中,会因为仓库版本的不同步出现很多错误 一.git简单的原理交互模型 从下面的model中我们看到在不创建分支情况下始终是远程的origin和本地的m ...
- Spring源码系列 — Bean生命周期
前言 上篇文章中介绍了Spring容器的扩展点,这个是在Bean的创建过程之前执行的逻辑.承接扩展点之后,就是Spring容器的另一个核心:Bean的生命周期过程.这个生命周期过程大致经历了一下的几个 ...
- conda opencv cv2.imshow无法使用
error: -------src-dir-------/opencv-2.4.10/modules/highgui/src/window.cpp:501: error: (-2) The funct ...
- ASP.NET Core快速入门(第6章:ASP.NET Core MVC)--学习笔记
课程链接:http://video.jessetalk.cn/course/explore 良心课程,大家一起来学习哈! 任务40:介绍 1.Individual authentication 模板 ...
- Linux文本文件——文本编辑器Vim
Linux文本文件——文本编辑器Vim 摘要:本文主要学习在Linux系统中使用Vim文本编辑器编辑文本. 什么是Vim Vim是一个基于文本界面的编辑工具,使用简单且功能强大.更重要的是,Vim是所 ...
- Java问题记录——IllegalMonitorStateException
Java问题记录——IllegalMonitorStateException 摘要:本文主要分析了IllegalMonitorStateException的产生原因. 部分内容来自以下博客: http ...
- Flask--g属性
目录 Flask之g属性 使用 session,flash,g的区别 Flask之g属性 专门用来存储用户信息的g对象,g的全称的为global g对象在一次请求中的所有的代码的地方,都是可以使用的 ...
- page的js访问全局变量:app.globalData.openid
page获取app.js:const app = getApp(); page的js访问全局变量(get/set):const app = getApp(); app.globalData.openi ...
- 【android】关于call拨号功能实现的记录
前几天考试居然记错dial和call,故在此写上小demo来作区别,加深印象. 主要是实现call(拨通电话)功能,dial(拨电话)功能用作对比,话不多说,贴上代码. 1.创建布局文件如下: < ...