php 模板和模块,thinkPHP——视图和模板

本文详细介绍了ThinkPHP5中视图模板的使用,包括视图文件结构、模板继承、模板布局、模板标签、数据传递、模板变量、模板函数以及控制器中的fetch和view方法。还探讨了路由规则的配置,展示了如何通过路由访问控制器方法。内容涵盖了视图文件的创建、控制器类的继承、模板输出和数据渲染等核心概念。
摘要由CSDN通过智能技术生成

视图

在index文件夹下面新建一个view文件夹,然后在新建一个index文件夹(与控制器中类的名字一致【小写】)新建一个index.html(与方法 名一致),作为视图输出的默认引擎

继承controller类,在index控制器中use think\controller 类,然后Index类继承controller类,使用控制器中的方法时会调用视图中的模板文件

use think\Controller;

class Index extends Controller

{

public function index()

{

$name='GG';

$email='GG@gmail.com';

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

$this->assign('email',$email);

return $this->fetch();

$this->db();

}

在模板文件中调用数据

{$name}


{$email}

在fetch中不配置文件时,会自动定位到默认模板/view/index/index.html(view/控制器名/方法名),传入一个test后会定义到view/index/test(/view/控制器名/传入名)

return $this->fetch('test');

fetch还可以跨模块调用模板(/view/user/user.html)

return $this->fetch('user/user')

fetch也可以直接传入模板变量,第一个参数是模板名,第二个是传入的数据

return $this->fetch('index/index',[

'name'=>'Haha',

'email'=>'haha@gmail.com'

]);

使用助手函数view渲染输出(和fetch类似)

return view('index/index',[

'name'=>'Haha',

'email'=>'haha@gmail.com'

]);

模板

ThinkPHP内置了一个基于XML的模板引擎

模板文件就是视图目录下的html文件,普通变量输出{

math?formula=%E5%8F%98%E9%87%8F%E5%90%8D%7D%EF%BC%88%E4%B8%8D%E8%83%BD%E6%9C%89%E7%A9%BA%E6%A0%BC%EF%BC%89%EF%BC%8C%E7%B3%BB%E7%BB%9F%E5%8F%98%E9%87%8F%E8%BE%93%E5%87%BA%7BThink}(以$Think开头) ,还有配置输出

常量输出:在class外部使用define定义常量的名称和值,然后再在模板中使用

define('APP_PA','自定义常量值');

{$Think.APP_PA}

使用函数,在模板中使用函数,例如使用md5加密变量

{$name|md5}

如果一个函数需要调用多个函数,第一个参数是y-m-d,第二个参数是前面的$ctime,用###标志变量的位置;还可以使用多个函数过滤,使用多个|分割即可

{$ctime|date="y-m-d G:i:s",###}

或者也可以使用多个函数嵌套的方法进行多次过滤

{:substr(strtoupper(md5($name)),0,3)}

原样输出

使用literal标签,会原样输出$name标签,而不会输出具体数据

{literal}

{$name}

{/literal}

代码注释使用{/这里是注释/};注释符号和大括号之间不能有空格

模板布局

全局配置方式;开启模板布局,在开启layout_on模块之前会(fetch和view)默认渲染/view/index/index.html文件,开启之后会渲染/view/layout.html,模板布局和其他模板类似,但是有一个输出替换变量{CONTENT},在读取layout模板之后,会解析index.html文件,然后会把解析的内容替换{CONTENT},而index.html文件中也就不再需要html标签

'template' => [

'layout_on' => true,

'layout_name' => 'layout',

]

模板布局

{__CONTENT__}

如果不需要使用模板布局功能,就在模板文件的开头加上{NOLAYOUT}字符串,比如:如果在index.html文件中加入{NOLAYOUT},即使开启模板布局功能,也不会加载模板布局

模板标签的方式,不需要在配置文件设置任何参数,不需要开启layout;关闭模板布局,然后在index.html文件的开头加上layout,name表示需要加载的模板文件的名字

{layout name='layout'}

使用layout控制布局模板,在控制器中使用layout方法,layout方法中可以添加true/false选择是否开启模板布局,也可以传入布局的文件名称选择布局文件

$this->view->engine->layout(true);

return $this->fetch('index',[

'name'=>'SSS',

'ctime'=>time()

]);

模板的继承

模板的继承和类的继承类似,定义基础的模块和相关的区块,子模块就可以对这些区块进行重载,区块由

{block}{/block}组成,新建一个base文件作为基础的模块,在index.html中使用模板的继承,此时index模块的样式完全是base中负模块的样式;子模块的其他内容不会显示

{block name='head'}

基础头部信息

{/block}


{block name='footer'}

基础底部信息

{/block}

{extend name='base'/}

在子模块中导入相同的结构,修改样式和内容信息,此时子模块为修改后的样式

{block name='head'}

子模板头部信息

{/block}


{block name='footer'}

子模板底部信息

{/block}

{extend name='base'/}

内容合并,在子模块中使用{block}标签,此时会同时显示子模块的头部信息和基础模块的头部信息

{block name='head'}{__block__}

子模板头部信息

{/block}


{block name='footer'}

子模板底部信息

{/block}

包含文件

一个模块中包含其他模块文件是使用include,包含的模板文件中不能使用模板布局和模板继承

{include file="../application/index/view/index/test.html" /}

内置标签

输出循环标签volist,offset表示从第几个数开始查询(不包括),length表示查询的长度,数据的条数

$list=UserModel::all();

$this->assign('list',$list);

echo gettype($list).'


';

return $this->fetch();

{volist name='list' id='vo' offset='1' length='1'}

{$vo.id}===>{$vo.name}

{/volist}

路由规则

在route.php配置文件中配置路由规则,在首页返回的数据

Route::get('/',function(){

return 'Hello,world!';

});

访问一个哦控制器中的方法,在网址后直接输入 new /1(任意一个数据),就会访问index模块下面的news控制器中的list方法;第三个参数是请求方法(GET,POST等,请求类型必须大写)

Route::rule('new/:id','index/News/read');

也可以直接使用Route调用方法来规定请求方式

Route::get('new/:id','index/News/read');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值