ThinkPHP—thinkphp视图

2022-04-22 0 141

配置文件分3类:系统配置文件,分组配置文件,应用配置文件

①系统配置文件ThinkPHP/Conf/convention.php;

②分组/模块/平台配置文件Home/Conf/config.php;

③应用配置文件Common/Conf/config.php;

(1)什么是视图?

MVC中的V(view),主要负责信息的输出展示

(2)视图的创建?

创建位置:分组目录Home下的View目录下指定的控制器名目录中,然后将模板绑定到控制器的方法中,一个公共控制器中可以绑定多个模板

注意:位置问题,控制器同名

①位置是view下与控制器同名的目录中;view下一级目录为控制器,二级目录为方法(对应的模板文件)

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

(3)视图的展示?

在smarty中展示模板用的display方法,在ThinkPHP里同样是display方法

display在ThinkPHP中的3种语法格式:

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

②$this->display(模板文件名–不带后缀);展示当前控制器下指定模板文件

③$this->display(view目录下目录名/模板文件名–不带后缀);展示指定控制器下的指定模板文件

案例:

<?php

namespace Admincontroller;

use ThinkController;

class TestController extends Controller{

public function test1(){

$this->display(‘Person/person’);//显示Person下person.html模板

}

}

?>

1.

2.

3.

4.

5.

6.

7.

8.

9.

(4)变量分配

将变量从控制器的方法里传递到模板中展示的过程即为变量分配

在ThinkPHP中系统封装好了一个变量的分配方法,在smarty中用assign,在ThinkPHP里也是assign(分配)

语法:$this->assign(‘模板中变量名’,$php中的变量名);

<?php

namespace Admincontroller;

use ThinkController;

class TestController extends Controller{

public function test1(){

//不写date()的第二个参数,则默认为当前时间

$time=date(‘Y-m-d h:i:s’,time());

$this->assign(‘time’,$time);//变量的传递,接下来是模板文件数据展示

$this->display();

}

}

?>

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

11.

12.

接下来是数据的展示

在smarty里展示变量,写在标记里{!—-}。在ThinkPHP里,默认的展示变量方法与smarty类似,{$模板中变量名}

<!DOCTYPE html>

<html>

<head>

<title>test1</title>

</head>

<body>

<p>

现在时间是:{$time}

</p>

</body>

</html>

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

11.

注意:①模板展示放在变量分配后,否则无法展示变量;②一般情况下两个参数的变量名是一样的,方便查找

(5)变量分隔符

ThinkPHP默认变量分隔符为{},可以在配置文件ThinkPHP/Conf/convertion.php里找到配置项

//布局设置

‘TMPL_L_DELIM’=>'{‘,//模板引擎普通标签开始标记

‘TMPL_R_DELIM’=>’}’,//模板引擎普通标签结束标记

1.

2.

3.

左右标记可以通过配置项修改,例如将左标记符改为],则在模板里的变量需要改为[$time}

(6)模板常量替换机制

①由来:实际开发中,在引入css、js、图片等文件时,往往需要些一些复杂的路径。这时可以考虑用模板常量替换机制,将复杂路径简单化

②ThinkPHP里系统默认提供了一下几个常用的模板常量(因为是模板常量,所以只能在模板中使用,不能在控制器里使用)

__MODULE__:(模块/组件),输出到分组,表示从域名后开始到分组名结束的路由。/index.php/Admin

__CONTROLLER__:(控制),输出到控制器,/index.php/Admin/Test

__ACTION__:(方法),输出到方法,/index.php/Admin/Test/test1

__PUBLIC__:表示从域名后开始找,站点根目录下Public目录路由,/public

__SELF__:当前路由,从域名后开始到路由结束,与__ACTION__区别:/index.php/Admin/Test/test1/id=10,具体输出不同。当没有参数时,__SELF__和__ACTION__相同

③模板常量来源?

这里模板常量是通过模板内容替换机制来实现的,并非是常量的定义。所以模板常量并非是常量,而是字符串。

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

拓展:查看后即可得出行为文件命名,文件名.Behaviour.class.php。

/**

*模板内容替换

* access protected

* param string$content模板内容

* return string

*/

protected function templateContentReplace($content){

//系统默认的特殊变量替换

$replace=array(

‘__ROOT__’=>__ROOT__,//当前网站地址

‘__APP__’=>__APP__,//当前应用地址

‘__MODULE__’=>__MODULE__,

‘__ACTION__’=>__ACTION__,//当前操作地址

‘__SELF__’=>htmlentities(__SELF__),//当前页面地址

‘__CONTROLLER__’=>__CONTROLLER__,

‘__URL__’=>__CONTROLLER__,

‘__PUBLIC__’=>__ROOT__.’/Public’,//站点公共目录

);

//允许用户自定义模板的字符串替换注意:行为文件是系统自带的,一般不建议去改动

if(is_array(C(‘TMPL_PARSE_STRING’)))

$replace=array_merge($replace,C(‘TMPL_PARSE_STRING’));

$content=str_replace(array_keys($replace),array_values($replace),$content);//这步便是通过模板内容替换机制str_replace

return$content;

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

11.

12.

13.

14.

15.

16.

17.

18.

19.

20.

21.

22.

23.

其模板常量的核心就是字符串的替换str_replace

④自定义模板常量

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

配置项为TMPL_PARSE_STRING

注意:开发时尽量不要修改系统配置文件,因为系统配置文件的作用范围十分广泛。可以将需要修改的配置项,在分组、应用级别的配置文件里去定义,不要直接在系统文件里修改。

例如:放到应用配置文件Common/Conf/config.php

<?php

return array(

//’配置项’=>’配置值’

//模板常量

‘TMPL_PARSE_STRING’=>array(

//__ROOT__.’/Public’站点公共目录,即根目录下public

‘__ADMIN__’=>__ROOT__.’/Public/Admin’,//定义好之后,可以通过__ADMIN__来访问静态资源路径

)

);

1.

2.

3.

4.

5.

6.

7.

8.

9.

验证:模板输入__ADMIN__来验证,输出结果为/Public/Admin,表示验证成功

(5)获取模板内容

在ThinkPHP里有一个方法与display展示模板方法类似,叫做fetch()方法

$this->display();用来展示模板内容,而$this->fetch常用来获取模板内容

语法:$this->fetch();

作用:获取模板内容,返回字符串(字节长度)

//模板常量的获取

$str=$this->fetch();

echo’<pre>’;

var_dump($str);

echo’</pre>’;

1.

2.

3.

4.

5.

注意:在ThinkPHP中封装好了一个友好的打印方法–dump()方法。语法格式:dump(需要打印的变量)

所以上诉打印语法可以换为

dump($str);

1.

该语法封装在系统的函数库ThinkPHP/Common/functions.php里

/**

*浏览器友好的变量输出

* param mixed$var变量

* param boolean$echo是否输出默认为True如果为false则返回输出字符串

* param string$label标签默认为空

* param boolean$strict是否严谨默认为true

* return void|string

*/

function dump($var,$echo=true,$label=null,$strict=true){

$label=($label===null)?”:rtrim($label).”;

if(!$strict){

if(ini_get(‘html_errors’)){

$output=print_r($var,true);

$output=’<pre>’.$label.htmlspecialchars($output,ENT_QUOTES).’</pre>’;

}else{

$output=$label.print_r($var,true);

}

}else{

ob_start();

var_dump($var);

$output=ob_get_clean();

if(!extension_loaded(‘xdebug’)){

$output=preg_replace(‘/]=>n(s+)/m’,’]=>’,$output);

$output=’<pre>’.$label.htmlspecialchars($output,ENT_QUOTES).’</pre>’;

}

}

if($echo){

echo($output);

return null;

}else

return$output;

}

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

11.

12.

13.

14.

15.

16.

17.

18.

19.

20.

21.

22.

23.

24.

25.

26.

27.

28.

29.

30.

31.

32.

(6)display()方法与fetch()方法对比:

display():替换模板中常量/变量→获取模板内容→输出模板内容

fetch():替换模板中常量/变量→获取模板内容

对比即可发现fetch()方法相对于display()方法只是缺少了输出模板的步骤

所以我们可以对上诉代码进行修改,手动添加输出echo()步骤,输出获取的内容即可产生和display()展示模板信息同样的效果

//模板常量的获取

$str=$this->fetch();

//模板内容的输出—产生类似于display()的效果

echo($str);

1.

2.

3.

4.

下面来看下底层实现的步骤:

①由当前控制出发开始分析,display()继承自父类控制器Controller.class.php

class TestController extends Controller{

public function test1(){

//模板常量的展示

$this->display();

//模板常量的获取

$str=$this->fetch();

echo($str);

}

}

1.

2.

3.

4.

5.

6.

7.

8.

9.

②分析父类控制器ThinkPHP/Library/Think/Controller.class.php,display来源于实例化Think/View

/**

*架构函数取得模板对象实例

* access public

*/

public function __construct(){

Hook::listen(‘action_begin’,$this->config);

//实例化视图类

$this->view=Think::instance(‘ThinkView’);

//控制器初始化

if(method_exists($this,’_initialize’))

$this->_initialize();

}

/**

*模板显示调用内置的模板引擎显示方法

*/

protected function display($templateFile=”,$charset=”,$contentType=”,$content=”,$prefix=”){

$this->view->display($templateFile,$charset,$contentType,$content,$prefix);

}

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

11.

12.

13.

14.

15.

16.

17.

18.

③Think/View.class.php,这里的display()便是我们底层最终执行的display()

/**

*加载模板和页面输出可以返回输出内容

* access public

* param string$templateFile模板文件名

* param string$charset模板输出字符集

* param string$contentType输出类型

* param string$content模板输出内容

* param string$prefix模板缓存前缀

* return mixed

*/

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’);

}

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

11.

12.

13.

14.

15.

16.

17.

18.

19.

20.

21.

综上,分析底层代码即可得出display()方法的前两部,实际上是通过fetch()方法实现的

(7)视图注释

回顾下HTML的注释<!–注释内容–>,普通的注释在页面源码中会被输出

在thinkPHP中的注释不会被输出

模板视图中变量的注释

行注释——{//注释内容}

块注释——{/*注释内容*/}

1.

2.

注释作用:提供代码可读性,方便日后项目的维护

注意:①不论行注释还是块注释,在注释里不要再加入模板变量,否则会被自动解析出来,影响注释,导致注释失败。例如:

<body>

{/*我是注释{$number}*/}<!–会被浏览器解析成{/*我是注释{$number}*/}–>

</body>

1.

2.

3.

②行注释不要跨行

拓展:

经典面试题:ThinkPHP中的行注释和块注释,与HTML里的注释有什么区别?

HTML中的注释属于客户端的注释,会在浏览器的源代码被输出,而ThinkPHP里的注释属于服务器端的注释,不会被输出

(8)变量分配

变量输出:简单变量,一维数组,二维数组,对象变量

变量的分配语法相同:都是assign(‘模板中的变量’,PHP中的变量);

①简单变量输出

上面已经总结过了,将变量从控制器的方法里传递到模板中展示的过程即为变量分配。在ThinkPHP中系统封装好了一个变量的分配方法,在smarty中用assign,在ThinkPHP里也

是assign(分配)

语法:$this->assign(‘模板中变量名’,$php中的变量名);

②一维数组输出

//定义一维数组

$array=array(‘123′,’456′,’789’);

//变量的分配

$this->assign(‘array’,$array);

1.

2.

3.

4.

在PHP里数组输出具体元素可以通过下标形式输出:$array[key]

在模板中也可以通过下标形式输出数组中的数据:{$array[key]},除此外还有其他形式,下面列举出来

中括号形式:{$array[key]}

点形式:{$array.key}

1.

2.

总结:两种形式都可以使用,没有什么区别

③二维数组输出

//定义二维数组

$array=array(

array(‘one’,’two’,’three’),array(‘four’,’five’,’six’)

);

//变量的分配

$this->assign(‘array’,$array);

1.

2.

3.

4.

5.

6.

模板中展示数组数据,可以通过下标、中括号形式输出

④对象变量输出

对象在实例化之后,会保存到变量中,而这个变量也可以分配到模板里去

首先创建类,然后实例化类来创建对象

注意:

1.对于多个人开发项目,函数名很容易重复。用了类之后,类之间的方法名被类分开,重名也没关系。

但是当项目更大时,类名也有可能重复。此时就要用到命名空间,来避免重名。所以创建类之前必须定义命名空间

2.创建类文件时,必须加上文件名.class.php

Student.class.php

<?php

//命名空间,命名空间的写法取决于文件存放的位置。因为要放到控制器目录AdminController里,所以命名空间为AdminController

namespace AdminController;

class Student{

}

?>

1.

2.

3.

4.

5.

6.

7.

TestController.class.php,该文件里不用引入,直接实例化类,输出

object(AdminControllerStudent)#6(0){

}

1.

2.

TestController.class.php:

<?php

namespace AdminController;

use ThinkController;

class TestController extends Controller{

public function test1(){

//实例化Student对象

$stu=new Student();

dump($stu);

}

}

?>

<meta charset=”utf-8″>//这里为了方便,直接去入口文件添加header头,设置编码字符集,我在下面拓展里做介绍

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

11.

12.

13.

类的实例化:

1.之所以不用引入类就能实例化,主要因为命名空间

命名空间运行流程:当需要引入或使用元素时,默认先去当前空间下去找。而Student.class.php在当前空间下AdminController,所以会找到执行。若找不到则会报错

2.如果不写命名空间、include、require则会默认从当前空间下去查找需要的元素,若找不到则报错

拓展:设置编码字符集:

index.php入口文件:

//给入口文件添加header头声明字符集

header(‘Content-Type:text/html;charset=utf-8′)

1.

2.

3.

接下来给类的属性赋值,并在方法中打印对象

//给类的属性赋值

$stu->id=’1′;

$stu->name=’Tony的名字’;

$stu->age=’23’;

dump($stu);

1.

2.

3.

4.

5.

输出结果为:

object(AdminControllerStudent)#6(3){

[“id”]=>string(1)”1″

[“name”]=>string(13)”Tony的名字”

[“age”]=>string(2)”23″

}

1.

2.

3.

4.

5.

之后将变量分配到目标中展示→首先创建模板,模板名与方法名一致;创建好之后输出对象

回顾PHP输出对象属性:①$obj->attr;②$obj::attr;两种方式输出对象属性。推荐使用第一种

ThinkPHP里输出属性值有两种方式:①$obj->attr;②$obj:attr;

所以ThinkPHP模板中输出变量可以用{$obj->attr}或者{$obj:attr}

注意:在ThinkPHP模板中,在输出对象属性时,不要使用.形式。因为不允许将对象作为数组使用,会报错

Cannot use object of type AdminControllerStudent as array翻译为:不能使用AdminControllerStudent类型的对象作为数组

1.

错误位置错误位置:Runtime临时文件下的65af6f45e2487d64435139e4da34a722.php即为该文件运行的临时目录,临时文件名通过md5加密

FILE:C:siteApplicationRuntimeCacheAdmin65af6f45e2487d64435139e4da34a722.php LINE:10

(9)系统变量

ThinkPHP里提供了以下几个系统级别的变量(可以理解为超全局变量在模板中的使用)

$Think.server;$Think.get;$Think.post;$Think.request;$Think.cookie;$Think.session;$Think.config;

下面依次介绍

$Think.server==$_SERVER获取服务器的相关信息,大约80个元素

$Think.get==$_GET获取get请求的信息

$Think.post==$_POST获取post请求的信息

$Think.request==$_REQUEST获取get和post中的信息,就是get和post的集合

$Think.cookie==$_COOKIE获取cookie信息

$Think.session==$_SESSION获取session信息

简单总结下就会发现:以上都是获取类型的变量,因为这些系统变量是用在模板中的。而目标里只能获取,不能设置

$Think.config为ThinkPHP封装的。表示获取ThinkPHP中所有配置文件的总和,如果后面指定了元素,则获取指定配置

上述7个常用系统变量语法格式相同,即{$Think.xxx.具体元素下标}。例如

{$Think.get.id}//在模板文件里获取get请求的id

1.

案例:

{//输出本机所有的环境变量}

环境变量:{$Think.server.path}<br/>

获取get传值:{$Think.get.id}<br/>

获取get和post传值:{$Think.request.id}<br/>

{//获取PHP的Session ID}

PHP的session ID:{$Think.cookie.PHPSESSID}<br/>

{//当前默认分组DEFAULT_MODULE,输出Home}

配置项:{$Think.config.DEFAULT_MODULE}

1.

2.

3.

4.

5.

6.

7.

8.

输出结果:

环境变量:C:windowssystem32;C:windows;C:windowsSystem32Wbem;C:windowsSystem32WindowsPowerShellv1.0;C:Program FilesGitcmd;C:PHPTutorialMySQL;C:AppServApache24bin;C:AppServphp5;C:AppServMySQLbin

获取get传值:1

获取get和post传值:1

PHP的session ID:kna70hjenfhuijnv7ca5itc423

配置项:Home

(11)视图中使用函数

在实际开发中,有些变量不能直接使用。举个例子,数据表中存储时间一般都为时间戳格式,展示的时候需要处理格式化,操作相对繁琐。这个时候便涉及到了视图中使用函数

语法格式:{$变量|函数名1|函数名2=参数1,参数2…,###}

参数说明:

$变量:模板变量;

|:变量修饰符;

函数1:要使用的第一个函数;

函数2:要使用的第二个函数;参数1:函数2的参数;

=:类似于PHP函数名后面的();

###:表示变量本身;

案例一:时间戳time()的格式化

PHP中的格式化语法:date(‘Y-m-d H-i-s’,time()),而在模板html中的语法为

PHP→

$time=time();

$this->assign(‘time’,$time);

$this->display();

HTML→

{$time|date=’Y-m-d H:i:s’,###}

1.

2.

3.

4.

5.

6.

7.

ThinkPHP中为了不再使用变量本身,使用###来代替变量本身

注意:

1.###:当需要使用的函数只有一个参数并且参数是变量自身时,###可以省略不写;函数有多个参数,但是其第一个参数是变量自身时,也可以省略不写;

2.函数名对应的函数必须是PHP内置函数或函数库(分为系统函数库、自定义函数库)文件里定义好的函数;

案例二:定义一个字符串,截取前5个字符,并转换为大写

//定义字符串、变量传递、模板展示

$str=’aBcDeFgHiJkLmN’;

$this->assign(‘str’,$str);

$this->display();

1.

2.

3.

4.

截取字符串:substr();字符串转化为大写strtoupper()

视图参数转换处理

{$str|substr=###,0,5|strtoupper=###}

1.

(12)默认值

使用场景:在论坛的个性签名处,如果用户什么都没写,一般默认会显示———–→这个家伙很懒,什么都没留下

默认值:当某个变量不存在或为空时,便会显示默认字符或默认值

语法:{$变量名|default=默认值},结合上面视图中函数的使用。这里可以理解为{$变量名|函数名=参数},而default为ThinkPHP封装的函数

个性签名:{$sign|default=’这个人很懒,什么也没留下…’}

1.

(13)运算符

加减乘除取余,自增自减

{$a+$b},{$a-$b},{$a*$b},{$a/$b},{$a%$b},{$a++}或{++$a},{$a–}或{–$a}

(14)文件引入

提出公共部分,后期维护方便

若首位公共部分不拿出来,则会造成两个问题①代码重复;②后期维护不便

PHP里引入文件可以用include和require,但在ThinkPHP只提供了一个模板标签include,可以引入公共部分代码。不能用require

PHP里require和include区别:include出错时会发出警告级别提示并继续执行;而require会生成致命错误,并停止脚本执行

语法:<include file=’需要引入的模板文件’/>

案例:

public function header(){//展示头部

$this->display();//展示模板

}

public function body(){

$this->display();

}

public function footer(){//展示尾部

$this->display();

}

1.

2.

3.

4.

5.

6.

7.

8.

9.

先检验三个模板可以展示成功后,再进行文件的引入

文件引入注意:①相对路径是相对于入口文件来说的相对路径,而不是当前文件;

<include file=’./Application/Admin/View/Public/header.html’/><!–公共头文件header.html,相对于入口文件index.php的相对路径–>

1.

为什么相对路径是针对入口文件呢?

因为<include/>标签是模板引擎标签,在服务器端入口文件进行解析,解析完成后才输出到浏览器。所以是相对于入口文件。

在实际开发中,因为路径过长,容易写错,但服务器端还不会报错。所以常用另外一种写法:

<include file=’View目录名/模板文件名(不加后缀)’/>

1.

例如上述路径还可以改为:

<include file=’Public/header’/><!–目录名/模板文件名(不加后缀)–>

1.

拓展:<include/>标签还可以传递参数,语法:<include file=’模板文件’参数名=’参数值’/>

案例:例如网站底部常见的Copyright©2009-2018格式,它是随着时间变化的,所以可以传递参数。在body部分的引入尾部文件部分加上参数

<include file=’Public/header’value=’2019-2020’/>

注意:参数值必须加‘’,不管数据类型是什么。否则会报XML语法错误

1.

2.

之后在底部文件foot.html中使用该参数[参数名]

Copyright©[value]

1.

注意:若参数不存在,则会原样输出到浏览器,显示为Copyright©[value]

(15)视图中数组循环遍历volist、foreach

在ThinkPHP里,系统提供了两个标签volist和foreach来实现数组在模板中的遍历操作

①volist语法:(双标签语句,所以需要闭合)

<volist name=’变量数组名(前面没有$)’id=’当前遍历到的元素’>

循环体

</volist>

对比:foreach对应关系

$key可以去掉,所以可以改为

fireach($variable as$value){//这里变量数组名=$variable,id=$value

#code…

}

1.

2.

3.

4.

5.

6.

7.

8.

foreach($variable as$key=>$value){

#code…

}

②foreach语法:

<foreach name=’变量数组名(前面没有$)’item=’当前遍历到的元素’>

循环体

</doreach>

1.

2.

3.

volist和foreach区别:

volist除了name和id属性对外,还支持更多属性对。如mod、key、length、offset等;而foreach标签除了上述name、item外,只支持key,其他均不支持。可以理解成foreach标签

是volist标签的简化版本。若想多样化控制输出,例如遍历数组输出偶数,或者输出第5-10的元素、为空提示等,可以使用<volist>标签控制。

实际开发里推荐使用volist标签,即使以后需要加多样化属性控制,只需在volist标签后加上属性对即可。

案例:

①一维数组遍历

控制器:

//一维数组

$array=array(‘one’,2,3,4,5,6);

$this->assign(‘array’,$array);

$this->display();

模板:

<!–参考PHP的foreach的$value,id名随意。但在PHP里一般起名叫vol–>

<volist name=’array’id=’vol’>

{$vol},

</volist>

或者

<foreach name=’array’item=’for’>

{$for}

</foreach>

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

11.

12.

13.

14.

15.

②二维数组遍历

//控制器变量传递及模板展示

$array=array(

array(‘one’,’two’),array(‘three’,’four’)

);

dump($array);

$this->assign(‘array’,$array);

$this->display();

//(1)循环后逐个读取(该方法需要先知道数组构成)

<volist name=’array’id=’vol’>

{$vol.0},{$vol.1},

</volist>

//(2)volist嵌套循环

<volist name=’array’id=’vol’>

<volist name=’vol’id=’vo’>

{$vo},

</volist>

</volist>

或者foreach嵌套循环

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

11.

12.

13.

14.

15.

16.

17.

18.

19.

(16)if标签

PHP中if判断作用是流程控制,在ThinkPHP里同样也可以用于流程控制

语法:(注意<if></if>标签闭合)

<if condition=’条件表达式’>

输出结果1

<elseif condition=’条件表达式2’/>

输出结果2

<elseif condition=’条件表达式3’/>

输出结果3

<else/>

输出结果

</if>

1.

2.

3.

4.

5.

6.

7.

8.

9.

案例:php里输出当天星期的数字,将变量传递到目标中。根据if判断条件的不同,输出显示当天星期

//控制器,根据手册查询可以得知N表示1(表示星期一)到7(表示星期天)

$time=date(‘N’,time());

dump($time);//输出string(1-7)

1.

2.

3.

接下来在模板里编写if判断输出代码

<if condition=’$time==1’>

今天是周一

<elseif condition=’$time==2’/>

今天是周二

<elseif condition=’$time==3’/>

今天是周三

<elseif condition=’$time==4’/>

今天是周四

<elseif condition=’$time==5’/>

今天是周五

<elseif condition=’$time==6’/>

今天是周六

<else/>

今天是周日

</if>

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

11.

12.

13.

14.

15.

注意:ThinkPHP的elseif间没有空格,JS里有

(17)PHP标签

PHP标签指在模板中使用PHP语法格式

ThinkPHP支持两种形式标签①PHP内置的标签<?php代码段?>;②ThinkPHP封装的PHP标签<php>代码段</php>

原始PHP标签:<?php echo tony;?><br/>

ThinkPHP封装的标签:<php>echo tony;</php>

1.

2.

注意:实际开发中不建议在模板中使用PHP标签(不管原生还是封装好的),为什么呢?

之前说过,编程的3个阶段混编、模板引擎、MVC。当前框架是遵循MVC设计规范设计的,如果在模板里加入PHP标签就变成混编,打破了MVC的设计规范

在配置项里,有一个配置项(TMPL_DENY_PHP即tmplate deny php拒绝php模板),可以禁用PHP标签。该配置项在系统配置文件ThinkPHP/Conf/convention.php里

//布局设置

‘TMPL_DENY_PHP’=>false,//默认模板引擎是否禁用PHP原生代码

1.

2.

开启后便会禁用原生PHP代码(不建议禁用),此时在模板文件里<?php?>原生PHP标签失效。下面来验证下,发现报错

🙁

模板禁用PHP代码

1.

2.

不建议禁用。若禁用了原生PHP标签,某些功能会异常。比如成功跳转和失败跳转,因为成功跳转和失败跳转使用了原生PHP标签,禁用的话会跳转失败

———————————–

ThinkPHP—thinkphp视图(V)

https://blog.51cto.com/u_15127600/3624637

1. 本站所有资源来源于用户上传和网络,因此不包含技术服务请大家谅解!如有侵权请邮件联系客服!88525903@qq.com
2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!
4. 如果您也有好的资源或教程,您可以投稿发布,成功分享后有积分奖励和额外收入!
5.严禁将资源用于任何违法犯罪行为,不得违反国家法律,否则责任自负,一切法律责任与本站无关

发表评论
暂无评论