表面上看,TP输出一个页面很简单:$this->display();

实际上是怎么回事呢?$this->display(); 这个display()方法是定义在ThinkPHP/Library/Think/Controller.class.php这个文件中的

protected function display($templateFile='',$charset='',$contentType='',$content='',$prefix='') {$this->view->display($templateFile,$charset,$contentType,$content,$prefix);
}

而这个display方法其实是属于$this->view这个对象的。$this->view 是什么呢?还是ThinkPHP/Library/Think/Controller.class.php这个文件

    public function __construct() {Hook::listen('action_begin',$this->config);//实例化视图类$this->view     = Think::instance('Think\View');//控制器初始化if(method_exists($this,'_initialize'))$this->_initialize();}

可以看到$this->view其实是Think\View类的一个实例,Think\View 就是ThinkPHP/Library/Think/View.class.php啦

那我们就去看看View.class.php中的display方法是长什么样的

    public function display($templateFile='',$charset='',$contentType='',$content='',$prefix='') {G('viewStartTime');// 视图开始标签Hook::listen('view_begin',$templateFile);// 解析并获取模板内容$content = $this->fetch($templateFile,$content,$prefix);// 输出模板内容$this->render($content,$charset,$contentType);// 视图结束标签Hook::listen('view_end');}

忽略G方法、钩子, 就是简单的两部分内容:1、解析并获取模板内容;2、输出模板内容;

具体怎么回事呢?

第一点是有两部分的,首先获取模板文件的位置($this->parseTemplate) ,然后把里面的PHP标签替换成具体的内容 

第二点呢,太简单了,直接echo $content,就输出内容了

到此,$this->display()背后的过程就清清楚楚了。

转载于:https://www.cnblogs.com/bushe/p/4620378.html

[thinkphp] 是如何输出一个页面的相关推荐

  1. ASP.NET 获取上一个页面的Url链接

    ASP.NET 获取上一个页面的Url链接Uri Url = HttpContext.Current.Request.UrlReferrer;

  2. 【Vue+Element UI】关闭指定某一个页面的loading动画

    [Vue+Element UI]关闭指定某一个页面的loading动画 模板:vue-admin-template v4.4.0 问题描述:由于vue-admin默认配置了全局loading,所以页面 ...

  3. 微信小程序 使用页面栈 修改上一个页面的data数据

    微信小程序中从一个页面A进入一个页面B,如果页面B的数据有改变,再返回页面A的时候需要把数据同步到页面A. 一般的方法有: 1. 使用本地缓存 wx.setStorage() 和 wx.getStor ...

  4. 关于如何控制一个页面的Ajax读数据只读一次的简单解决办法!

    例如:一个页面有一个按钮,点击的时候用ajax去后台获取数据,获取成功以后返回.下次再点击的时候就不要去获取数据了. 解决办法有很多: 1.用Get方法去读数据,会缓存. 2.用jquery的data ...

  5. 页面的div中有滚动条,js实现刷新页面后回到记录时滚动条的位置

    当div中绑定数据,给它一个属性overflow-y: scroll,添加长度大小,使其能够出现滚动条:每次刷新的时候滚动条总是会出现在最上方,这使我很头疼,经过查阅网上资料,返现两种方法可行.如下: ...

  6. javascript笔记——点击按钮(或超链接)如何跳转到另外一个页面并执行目标页面的js函数...

    页面跳转同时执行js代码$(function(){});url参数传递 标题的前半部分其实不必赘述,按钮也可以换成超链接.. 假设是需要在A页面上的一个按钮,点击后跳转到B页面,传一些参数后且并B页面 ...

  7. json里面返回模板输出的html,在JSON响应中返回完整页面的HTML而不是字符串输出...

    我想通过使用web方法的ajax实现最简单的任务.我的web方法如下在JSON响应中返回完整页面的HTML而不是字符串输出 [WebMethod] public static string GetDa ...

  8. 分享一个微信小程序编辑页面的WXML模板

    分享一个微信小程序编辑页面的WXML模板 最近在进行微信小程序开发的时候经常会碰到编辑页面的搭建,大致格式如图所示: 顶部:返回按钮和确认按钮,在中间还可以自行加上一些别的元素. 中间部分:编辑的标题 ...

  9. github 首页 html,GitHub - merrier/github-html-preview: 一个可以直接预览html页面的chrome插件...

    Github HTML Preview 一个可以直接预览html页面的chrome插件 Github HTML Preview provide a quick way to preview the h ...

最新文章

  1. 尚硅谷学习:createElement 方法笔记
  2. 详解zabbix安装部署(Server端篇)
  3. win10 linux ssh自动启动,win10子系统 wsl开机启动ssh服务
  4. 万字详解,JDK1.8的Lambda、Stream和日期的使用详解
  5. SAS 中计算总和或者计算总数的方法
  6. War3窗口限定小工具发布
  7. Jxls异常 Cannot load XLS transformer. Please make sure a Transformer impleme
  8. java零基础Ⅲ-- 8.算法优化体验课-骑士周游问题
  9. 加工中心计算机编程自学,自学加工中心编程(简单易学)图文讲解
  10. 排课系统asp源代码_高校教务排课系统源代码及全套资料.doc
  11. 一条来自水圈的鄙视链
  12. 想要更高效地使用云计算,推荐学习云计算部署的五大策略
  13. pyppeteer实现问卷星自动填写
  14. 打包微服务前后端分离项目并部署到服务器 --- 分布式 Spring Cloud + 页面渲染 Nuxt.js
  15. 快给你的对象做一个微信公众号播报吧-java版
  16. IE8浏览器兼容问题(日常经验总结)
  17. anaconda使用jupyter
  18. 如何加密html文件怎么打开,文件加密巧用IE浏览器
  19. “{:02d}”.format(i)什么意思
  20. 计算机数据的平均函数是,excel软件中数据的平均值怎么求取

热门文章

  1. mysql如何开启远程链接_mysql怎么开启远程连接
  2. canal mysql 数据同步
  3. [深度学习] 自然语言处理 --- ALBERT 介绍
  4. YUV420数据格式
  5. ai无法启动产品_启动AI启动的三个关键教训
  6. nlp自然语言处理_自然语言处理(NLP):不要重新发明轮子
  7. 上市公司降价200万卖房仍然无人接手,有的甚至降价1900万
  8. keras的学习笔记
  9. MATLAB求音频信号特征的自定义函数.md
  10. ISE报错问题集锦(转载)