ThinkPHP3.2学习笔记2——视图

本文详细介绍了ThinkPHP3.2框架中的视图功能,包括视图的创建、模板展示(display()和fetch())、视图注释、变量分隔符、模板常量替换、变量分配(一维数组、二维数组、对象变量)、系统变量、视图中使用函数、默认值、运算符、文件包含、循环遍历和条件判断等内容,帮助开发者更好地理解和运用ThinkPHP的视图机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ThinkPHP中的视图

什么是视图

视图就是MVC三大组成部分中V(View)主要是负责信息的输出和展示。

视图的创建

创建的位置需要是在分组目录下的View目录下与控制器同名的目录中。
例如:Test控制器中的login方法,需要有一个模板,则该模板文件login.html需要放到View/Test/login.html

如果有多个模板文件,则按照上面的要求进行创建。

模板的展示display()

在smarty中展示模板使用的方法是display,在thinkPHP中同样也是display方法。

语法格式:
展示当前控制器下与当前请求方法名称一致的模板文件:$this->display();

展示当前控制器下指定的模板文件:$this->display('模板文件名[不带后缀]');

展示指定控制器目录下的指定模板文件:$this->display('View目录下的目录名/模板文件名[不带后缀]');
在这里插入图片描述

模板内容获取方法fetch()

语法格式:$this->fetch();

在thinkPHP中系统封装好了一个友好的打印方法dump(),封住在系统的函数库文件function.php中
语法格式:dump(需要打印的变量)

	//模板常量的展示
	public function test10(){
		$str=$this->fetch();
		dump($str);
	}

比较:

  • display方法:替换模板中的常量/变量->获取模板内容->输出模板内容
  • fetch方法:替换模板中的常量/变量->获取模板内容
  • display方法的前两步的操作实际上是通过fetch方法来实现

视图中的注释

视图中的注释特指thinkPHP中视图的注释。

1.普通注释:

  • <!--普通注释-->

2.在thinkPHP中视图注释:

  • 行注释:{//行注释}
  • 块注释:{/*块注释*/}

区别:
普通的HTML注释属于客户端注释,会在浏览器的源代码中输出;
而thinkPHP中的模板注释则属于服务器端的注释,不会被浏览器输出。

<body>
	<!--这是普通注释-->
    ThinkPHP中的行注释:{//行注释}<br>
    ThinkPHP中的块注释:{/*块注释*/}
</body>

显示效果如下:

注意:

  1. 行注释不要当做块注释来写(横跨多行);
  2. 在行注释和块注释当中(大括号里面)不要再出现大括号(模板变量);

变量分隔符

在thinkPHP中默认的左右变量分隔符是 {} ,其是可以被更改的,可以在配置文件中找到具体配置项。

模板常量的替换机制

替换机制:可以查看行为文件ThinkPHP/Library/Behavior/ContentReplace.Behavior.class.php

在thinkPHP中系统默认给我们提供一下几个常用的模板常量:
__MODULE__:表示从域名后面一直到分组名结束的路由;
__CONTROLLER__:表示从域名后面开始一直到控制器结束的路由;
__ACTION__:表示从域名后面开始后一直到方法名结束的路由;
__PUBLIC__:表示站点根目录下public目录的路由
__SELF__:表示从域名后面开始一直到路由结束

为了后期使用的方便,我们可以在配置文件中定义一个自定义的模板常量;

  • 在开发的时候,不到万不得已不要去修改系统配置文件。可以将需要的配置项在分组/应用级别的配置文件去添加。
    Application/Common/Conf/config.php
<?php
return array(
	//'配置项'=>'配置值'
	
	//模板常量
	'TMPL_PARSE_STRING'=>array(
			'__ADMIN__'=>__ROOT__.'/Public/Admin'
		),
);

变量分配(初阶)

在实际开发时不仅仅只是展示模板这么简单,往往还需要展示数据,这个时候变量还在控制器的方法中,需要将数据传递到模板中并且展示,这个过程叫变量分配。

在thinkPHP中系统封装了一个变量的分配方法,这个方法叫做assign;

  1. 语法格式:$this->assign('模板中变量名',$php中的变量名);
  • 一般情况下,两个参数的变量名一样。
  1. 在模板中展示数据(默认):{$模板中的变量名}
    例子:
	//简单变量分配
	public function test9(){
		//定义变量
		$var =date('Y-m-d H:i:s',time());
		//变量分配
		$this->assign('var',$var);
		//展示模板
		$this->display(); 
	}
<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>

<body>
现在是北京时间:{$var}
</body>
</html>

变量分配(进阶)

在thinkPHP中变量的分配(不考虑变量类型)都是使用assign语法格式:$this->assign('模板中的变量',php中变量);

一维数组

关于数组在模板中输出的语法格式:

  1. 支持中括号形式:{$array[key]}
  2. 支持点形式:{$array.key}

例子:

  1. 在控制器中定义一个一维数组,将其分配到模板中:
	//一维 变量的输出
	public function test12(){
		$array=array(1,2,3,4,5);
		$this->assign('array',$array);
		$this->display();
	}
  1. 定义模板并输出:
<body>
	{$array[0]}<br>
	{$array.1}<br>
</body>

效果如下:

二维数组

例子:

  1. 在控制器中定义一个二维数组,将其分配到模板中:
	//二维数组 变量的输出
	public function test12(){
		$arrays=array(
			array(1,2,3,4),
			array(11,12,13,14)
		);
		$this->assign('arrays',$arrays);
		$this->display();
	}
  1. 定义模板并输出 :
<body>
    {$arrays[0][1]}<br>
    {$arrays.1.0}<br>
</body>

效果如下:

对象变量

关于对象的属性在模板中输出的语法格式:

  1. 支持箭头形式:{$obj->attr}
  2. 支持冒号形式:{$obj:attr}

例子:

  1. 在控制器的同级目录下,创建对象:
<?php
namespace Admin\Controller;
class Student{
}
  1. 类的实例化,给类的属性赋值,将对象分配到模板中去展示
	//对象 变量分配
	public function test13(){
		$stu=new Student();
		$stu->id=100;
		$stu->name='马冬梅';
		$this->assign('stu',$stu);
		$this->display();
	}
  1. 定义模板并输出
<body>
	{$stu->id}
	{$stu:name}
</body>

效果如下:

系统变量

在thinkPHP中系统提供以下几个系统级别的变量(超全局变量在模板中的使用):

  1. $Think.server 等价于$_SERVER,获取服务器的相关信息
  2. $Think.get 等价于$_GET,获取get请求信息
  3. $Think.post 等价于$_POST,获取post请求的信息
  4. $Think.request 等价于$_REQUESTZ,获取get和post中的信息
  5. $Think.cookie 等价于$_COOKIE,获取cookie中的信息
  6. $Think.session 等价于$_SESSION,获取session中的信息
  7. $Think.condig 获取ThinkPHP中所有配置文件的一个总和,如果后面指定了元素,则获取指定的配置

语法格式:{$Think.xxx.具体的元素下标}

例如:需要获取get请求中的id,则可以写成{$Think.get.id}

例子:

<body>
	$Think.server.path:{$Think.server.path}<br/>
    $Think.get.id:{$Think.get.id}<br/>
    $Think.request.pid:{$Think.request.pid}<br/>
    $Think.cookie.PHPSESSID:{$Think.cookie.PHPSESSID}<br/>
    $Think.config.DEFAULT_MODEULE:{$Think.config.DEFAULT_MODULE}<br/>

视图中使用函数

语法格式:{$变量|函数名1|函数名2=参数=1,参数=2}
参数说明:
1. $变量:模板变量
2. |:变量修饰符
3. 函数名1:表示需要使用的第一个函数
4. 函数名2:表示需要使用的第二个函数
5. =:表示该函数有参数
6. 参数1参数2:函数2的参数
7. ###:表示变量自身

特别说明:

  1. 当需要使用的函数只有一个参数且只参数是变量自身时,###可省略不写;
  2. 当需要使用的函数有多个参数,但其第一个参数是变量自身时,###可省略不写;
  3. 关于函数名的说明:函数名对应的函数必须是PHP内置函数或是在函数库定义好的函数,其他主观臆造的函数不能使用。

例子:时间戳的格式化

	//模板中函数的使用
	public function test15(){
		$time=time();
		$this->assign('time',$time);
		$this->display();
	}

分析:格式化时间戳使用的函数是date,语法格式是date('Y-m-d H:i:s',时间戳);

<body>
	{$time|date='Y-m-d H:i:s',###};
</body>

默认值

默认值:就是当某个变量不存在或为空的时候,就会显示默认的字符,默认的字符就是变量的默认值。

语法格式:{$变量名|default=默认值}
-结合视图中使用函数的语法格式,可以得知default其实是thinkPHP中封装的一个函数,默认值是函数的参数。

例子:

	//默认值
	public function test16(){
		$str2='';
		$this->assign('str2',$str2);
		$this->display();
	}
<body>
	个性签名1:{$str1|default='这个家伙很懒,什么都没留下'}<br/>
	个性签名2:{$str2|default='这个家伙很懒,什么都没留下'}
</body>

运算符

在thinkPHP中同样支持在模板中对变量进行运算。

例子:

	//运算符
	public function test17(){
		$a=1;
		$b=2;
		$this->assign('a',$a);
		$this->assign('b',$b);
		$this->display();
	}
<body>
	a={$a}
    b={$b}<br>
	a+b={$a+$b}<br>
    a-b={$a-$b}<br>
    a*b={$a*$b}<br>
    a/b={$a/$b}<br>
    a%b={$a%$b}<br>
    a++={$a++}<br>
	a--={$a--}<br>
    --a={--$a}<br>
	++a={++$a}<br>
</body>

运行结果如下:

文件的包含

在thinkPHP中系统提供了一个模板标签,可以让我们引入一些公共部分的代码文件,这个标签就是include标签。

语法格式1:<include file='需要引入的模板文件' />

  • 路径可以是相对路径,但 是相对于入口文件的。

语法格式2:<include file='View 目录名/模板文件名' />

除了使用include标签来引入文件之外,include标签还有另外一个用法,用来传递参数给引入的模板文件。
语法格式3:<include file='需要引入的模板文件' 参数名='参数值' />
在目标文件中使用参数的位置写成:[参数名]

  • 如果目标文件中的参数[]不存在,则[]会被原样输出在浏览器上。

例子:

	//文件包含 include标签
	public function test18(){
		$this->display();
	}
  1. test18.html
<body>
	<include file="Application/Admin/View/Test/head.html"/>
    <div>test18内容</div>
    <include file="Application/Admin/View/Test/foot.html"/>
    <br>
    <include file="Test/head"/>
    <div>test18内容</div>
    <include file="Test/foot" title='标题'/>
    <br>
</body>
  1. Application/Admin/View/Test/head.html
<body>
	-----头部-----
</body>
  1. Application/Admin/View/Test/foot.html
<body>
-----尾部[title]-----
</body>

显示效果:

循环遍历

在thinkPHP中系统提供了2个标签来实现数组在模板中的遍历:volist标签、foreach标签。

volist语法:

<volist name='需要遍历的模板变量名' id='当前遍历到的元素'>
	循环体
</volist>

foreach语法:

<foreach name='需要遍历的模板变量名' item='当前遍历到的元素'>
	循环体
</foreach>

例子:

	//循环遍历 volist foreach
	public function test19(){
		$arr=array(1,2,3,4,5);
		$this->assign('arr',$arr);
		$this->display();
	}
<body>
	<volist name='arr' id='vol'>
    	{$vol},
    </volist>
    <hr>
    <foreach name='arr' item='for'>
    	{$for}-
    </foreach>
</body>

if标签

在thinkPHP中if标签用于流程控制。

语法格式:

<if condition='条件表达式1'>
	输出结果1
<elseif condition='条件表达式2'>
<elseif condition='条件表达式3'>
...
<else />
	最后一个输出结果
</if>

例子:

	//if标签
	public function test20(){
		$a=10;
		$this->assign('a',$a);
		$this->display();
	}
<body>
	<if condition="$a lt 0">
    	a<0
    	<elseif condition="$a==1"/>
    		a=1
    	<else/>
    		a={$a}
    </if>
</body>

php标签

php标签就是指在模板中使用PHP语法格式。
模板中的php标签支持2种形式:
语法格式1:<?php PHP代码段?>
语法格式2: PHP代码段

  • 在实际开发中一般情况下不建议在模板中使用PHP标签,在配置项中有一个配置项可以禁用php标签,配置项叫做:TMPL_DENY_PHP;
  • 禁用php标签之后,只是禁用原始的php标签,并不会禁用thinkPHP封装的php标签;但是不建议禁用,原因是系统的跳转方法的模板文件使用了原生的php标签。

例子:

	//PHP标签
	public function test21(){
		$this->display();
	}
<body>
原始的PHP标签:<?php echo 'hello php';?><br>
thinkPHP封装的PHP标签:<php> echo 'hello thinkPHP';</php><br>
</body>

效果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值