Thinkphp5.0 视图和版本的学习记录总结,详细内容参看官方提供的完全开发手册(虽然文档写的很烂,看一遍还不定能明白是干嘛的,这也是我总结记录的一个原因)。ThinkPHP5.0完全开发手册http://www.kancloud.cn/manual/thinkphp5/118003.

logo.png

文档中经常出现的视图、模板、模板引擎这三个概念究竟如何理解?

视图:即是MVC中的V,也就是在模块下面的view目录下的html文件,承载着页面内容显示和用户交互相关。

模板:在这里我理解为视图就是模板,在fetch,display等方法中传入的模板参数就是视图文件的路径。

模板引擎:就是生成、解析模块的一个机制或者一个封装的操作。解析模板中的一些规则,最终转化为PHP代码。以模板传递变量为例:

// 模板变量赋值

$this->assign('name','ThinkPHP');

在模板中使用变量:

模板变量 : {$name}

经过模板引擎解析后该代码转化为:

模板变量 : <?php echo $name; ?>

其中{,}是在配置文件中模板的标签标记,模板引擎解析定义好的标记,在按照约定的操作来解析模板中的代码为PHP代码,最后转为php文件输出。这下理解了吧,模板引擎就是干这些事情的。

tp5中模板引擎包含PHP原生模板和Think模板引擎,默认的Think,这些在实际中一般用不到,全部都按默认的即可。此外TP5还支持比较有名的Smarty模板,需要一些设置操作。

关于模板其实其原理都是差不多,都是为了方便前后端分离操作,有人说php语言本身就可以充当模板和其他模板一样直接嵌入在在html中,所以其他模板没有存在的必要性,这个不同的人各执一词没法讨论。

视图中fetch、display方法如何区别及使用

继承了\think\Controller类的控制器中可以直接调用$this->fetch('hello',['name'=>'thinkphp']);这里的fetch方法是controller的方法,display方法也是一样。fetch方法源代码如下:

/**

* 加载模板输出

* @access protected

* @param string $template 模板文件名

* @param array $vars 模板输出变量

* @param array $replace 模板替换

* @param array $config 模板参数

* @return mixed

*/

protected function fetch($template = '', $vars = [], $replace = [], $config = [])

{

return $this->view->fetch($template, $vars, $replace, $config);

}

其实调用的也是view中的fetch方法。关于fetch、display方法作用文档解释如下:

| 方法 | 说明 |

|-------- |------ ------ |

| fetch | 渲染模板输出 |

| display | 渲染内容输出 |

| assign |模板变量赋值 |

|engine |初始化模板引擎 |

根据以上解释你能分出方法fetch/display的区别和作用吗?我的理解如下:

fetch方法: 用来获取模板并输出显示,默认不带任何参数 自动定位当前操作的模板文件。如果传入参数,参数是具体的一个模板,这个方法较为常用。

display方法:不使用模板文件,直接传入的参数是具体的内容(可以是字符串或其他内容文档),然后直接输出,传入参数如果为空可能会什么都不显示。这个方法貌似用的不多。

模板输出替换

模板的输出替换就是在模板中替换一些特定的字符串,这个有点类似于宏定义在代码编译时期的直接替换。

替换的字符变量必须在应用的config.php文件中 view_replace_str指定。

// 视图输出字符串内容替换

'view_replace_str' => [

'__PHP__' => 'Hypertext Preprocessor',

],

这样可以全局在模板中可以直接使用'_PHP_' , 然后就行输出内容'Hypertext Preprocessor'。定义的内容必须在view_replace_str中以数组的形式存储,否则可能会不起作用。

模板变量输出

模板中可以输出变量,当然是由于模板引擎的作用。变量也可以原样输出即不被引擎解析

可以使用literal标签来防止模板标签被解析,例如:

{literal}

Hello,{$name}!

{/literal}

上面的{$name}标签被literal标签包含,因此并不会被模板引擎解析,而是保持原样输出。

模板输出中可以是赋值的变量,也可以是系统变量、系统配置参数、系统常量等数据。此外关于变量还可以进行一些运算操作和函数的使用。

感悟

官方完全开发手册反反复复看了几遍,有时去看看源码,有时依然懵逼。现在意识到即使完全掌握了TP,不会HTML,不会CSS还是做不出像样的东西来,听说bootstrap适合我这样不懂前端的菜鸟,而且还有基于bootstrap的可视化在线布局工具,可以导出代码,然后在此基础上加以修改。

找了两个可视化布局地址:

基于此我还在慢慢的学习。肯定有理解不到位的地方或者其他更好的学习途径和方法,若你能看到,谢谢指教!

tp5 php文件做模板模板,TP5视图和模板相关推荐

  1. php 模板替换,使用PHPWord对Word文件做模板替换

    因工作需要,使用了版本比较旧的PHPWord项目 官方已不见维护更新,上次版本更新是在Fri Jul 8, 2011 at 8:00 AM 如果PHP版本>=5.3.3,强烈推荐使用PHPOff ...

  2. 修改了模板文件tpl如何立即生效_Views视图与模板

    一.概述 用户请求到视图流程: 当有人访问我们django项目的时候 例如127.0.0.1:8000/polls/23,django首先到加载mysite.urls模块 在mysite.urls中发 ...

  3. 【Flask】官方教程(Tutorial)-part2:蓝图-视图、模板、静态文件

    前序文章: 官方教程(Tutorial)-part1:项目布局.应用程序设置.定义和访问数据库 蓝图-视图 视图函数是您为响应应用程序请求而编写的代码.Flask 使用模式将传入的请求 URL 与应该 ...

  4. php读取word模板文件,使用PHPWord对Word文件做模板替换

    文章排版有点乱,建议点击左下角的"阅读原文"查看. 因工作需要,使用了版本比较旧的 PHPWord项目 官方已不见维护更新,上次版本更新是在 Fri Jul 8, 2011 at ...

  5. C++模板学习02(类模板)(类模板语法、类模板与函数模板的区别、类模板中的成员函数创建时机、类模板对象做函数参数、类模板与继承、类模板成员函数类外实现、类模板分文件编写、类模板与友元)

    C++引用详情(引用的基本语法,注意事项,做函数的参数以及引用的本质,常量引用) 函数高级C++(函数的默认参数,函数的占位参数,函数重载的基本语法以及注意事项) C++类和对象-封装(属性和行为作为 ...

  6. Flask视图、模板、模型

    Day01 Flask前期了解: 为什么要使用框架: web网站发展至今,特别是服务器端,涉及到的知识.内容,非常广泛.这对程序员的要求会越来越高.如果采用成熟,稳健的框架,那么一些基础的工作,比如, ...

  7. Django 视图和模板1.4

    视图 在django中,视图对WEB请求进行回应 视图接收reqeust对象作为第一个参数,包含了请求的信息 视图就是一个Python函数,被定义在views.py中 #coding:utf-8 fr ...

  8. spring mvc 渲染html,在Spring MVC中使用Thymeleaf模板渲染Web视图

    Thymeleaf模板是原生的,不依赖于标签库.它能在接受原始HTML的地方进行编辑和渲染.由于没有与Servlet规范耦合,因此Thymeleaf模板能够进入JSP所无法涉及的领域 如果想要在Spr ...

  9. 织梦模板不支持html,html中{}是什么样的模板?如何使用它?HTML5template模板标签是什么?html常用的字体样式是什么?dede后台文件为什么不能生成html?...

    html中{}是什么样的模板?如何使用它?HTML5template模板标签是什么?html常用的字体样式是什么?dede后台文件为什么不能生成html?我们经常遇到这些问题,下面就和小编一起来看看吧 ...

  10. 做PPT时流程图相关的模板在哪里可以下载?

    Word.PPT是我们常用的办公类型软件,通常也支持绘制流程图.但是自带的图形模板满足不了大众的审美需求,相比较专业画流程图的软件来说,绘制出来的流程图不是图片过长就是过高,软件单一.功能太少,导致花 ...

最新文章

  1. mysql navicat导入bcp_SQL Server中BCP导入导出用法详解
  2. hdu 1796 How many integers can you find 容斥定理
  3. 12864输出字符c语言,大家看看该怎么改才能让12864液晶显示屏显示21个字符啊?...
  4. Python 正则表达式-问号的四种用法
  5. HDU1576(欧几里得算法)
  6. java ee maven_针对新手的Java EE7和Maven项目–第6部分
  7. Netcdf文件导出基本代码示例
  8. Oracle segment啥意思,关于oracle数据库段segment的小结
  9. ZendStudio8的注册码
  10. listview 刷新结束 监听_Flutter 开发从 0 到 1(四)ListView 下拉加载和加载更多
  11. slf4j在linux位置,SLF4J环境设置
  12. 使用游标正确提取SQL Server数据并将其放置在Reporting Services矩阵中
  13. 最良心的Chrome插件可以良心到什么程度?
  14. PHP中的数组(排序)
  15. python3安装pymysql_ubuntu16.04 python3安装pymysql错误
  16. JS工具类(一):DateUtil.js
  17. 解决mac 下蓝牙卡顿问题
  18. 【CF613D】Kingdom and its Cities(虚树,动态规划)
  19. 江苏单招C语言试题,2011年对口单招计算机试卷(C语言+原理+电工答案).doc
  20. python编程midi键盘按键错乱_电脑键盘按键错乱怎么回事 电脑键盘按键错乱原因【图文】...

热门文章

  1. intellij 关闭自动保存和标志修改文件为星号dxl
  2. 「360水滴」事件后,你的摄像头就安全了吗? IP问问:发现风险网络摄像头的位置
  3. php社交项目源代码,PHP交友聊天源码,社交网络网站源代码,带即时聊天,带聊天室功能,带原生APP源码...
  4. Java 常用命令总结
  5. python俄罗斯方块编码简单_python俄罗斯方块教程-100行代码
  6. 计算机拼音字体大小设置,拼音字体
  7. 服务器重装系统u盘启动不了怎么办,重装系统时BIOS不识别U盘启动盘怎么办
  8. 软件设计师历年真题与解析分享(05——17年)
  9. Pycharm导入MySQL驱动包误区
  10. html 双 直线 公文,公文格式标准页面设置