thinkPHP——视图和模板

视图

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

  1. 继承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();
    }
  1. 在模板文件中调用数据
    {$name}
    <hr>
    {$email}
  1. 在fetch中不配置文件时,会自动定位到默认模板/view/index/index.html(view/控制器名/方法名),传入一个test后会定义到view/index/test(/view/控制器名/传入名)
return $this->fetch('test');
  1. fetch还可以跨模块调用模板(/view/user/user.html)
return $this->fetch('user/user')
  1. fetch也可以直接传入模板变量,第一个参数是模板名,第二个是传入的数据
return $this->fetch('index/index',[
           'name'=>'Haha',
           'email'=>'haha@gmail.com'
        ]);
  1. 使用助手函数view渲染输出(和fetch类似)
return view('index/index',[
           'name'=>'Haha',
           'email'=>'haha@gmail.com'
        ]);

模板

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

  1. 模板文件就是视图目录下的html文件,普通变量输出{变量名}(不能有空格),系统变量输出{Think}(以$Think开头) ,还有配置输出
    常量输出:在class外部使用define定义常量的名称和值,然后再在模板中使用
define('APP_PA','自定义常量值');
    {$Think.APP_PA}
  1. 使用函数,在模板中使用函数,例如使用md5加密变量
{$name|md5}
  1. 如果一个函数需要调用多个函数,第一个参数是y-m-d,第二个参数是前面的$ctime,用###标志变量的位置;还可以使用多个函数过滤,使用多个|分割即可
{$ctime|date="y-m-d G:i:s",###}

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

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

原样输出

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

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

模板布局

  1. 全局配置方式;开启模板布局,在开启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',
]

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>模板布局</title>
</head>
<body>
  <div style="background-color:aqua;height: 200px;width: auto"></div>
  {__CONTENT__}
  <div style="background-color:darkslategrey;height: 200px;width: auto"></div>
</body>
</html>
  1. 如果不需要使用模板布局功能,就在模板文件的开头加上{NOLAYOUT}字符串,比如:如果在index.html文件中加入{NOLAYOUT},即使开启模板布局功能,也不会加载模板布局
  2. 模板标签的方式,不需要在配置文件设置任何参数,不需要开启layout;关闭模板布局,然后在index.html文件的开头加上layout,name表示需要加载的模板文件的名字

{layout name='layout'}

  1. 使用layout控制布局模板,在控制器中使用layout方法,layout方法中可以添加true/false选择是否开启模板布局,也可以传入布局的文件名称选择布局文件
        $this->view->engine->layout(true);
        return $this->fetch('index',[
            'name'=>'SSS',
            'ctime'=>time()
        ]);

模板的继承

  1. 模板的继承和类的继承类似,定义基础的模块和相关的区块,子模块就可以对这些区块进行重载,区块由
    {block}{/block}组成,新建一个base文件作为基础的模块,在index.html中使用模板的继承,此时index模块的样式完全是base中负模块的样式;子模块的其他内容不会显示
{block name='head'}
<div style="width: auto;height: 100px;background-color:paleturquoise;"><h2>基础头部信息</h2></div>
{/block}
<hr>
{block name='footer'}
<div style="width: auto;height: 100px;background-color:dimgrey;"><h2>基础底部信息</h2></div>
{/block}
{extend name='base'/}
  1. 在子模块中导入相同的结构,修改样式和内容信息,此时子模块为修改后的样式
{block name='head'}
<div style="width: auto;height: 100px;background-color:aqua;"><h2>子模板头部信息</h2></div>
{/block}
<hr>
{block name='footer'}
<div style="width: auto;height: 100px;background-color:lawngreen;"><h2>子模板底部信息</h2></div>
{/block}
    {extend name='base'/}
  1. 内容合并,在子模块中使用{block}标签,此时会同时显示子模块的头部信息和基础模块的头部信息
{block name='head'}{__block__}
<div style="width: auto;height: 100px;background-color:aqua;"><h2>子模板头部信息</h2></div>
{/block}
<hr>
{block name='footer'}
<div style="width: auto;height: 100px;background-color:lawngreen;"><h2>子模板底部信息</h2></div>
{/block}

包含文件

  1. 一个模块中包含其他模块文件是使用include,包含的模板文件中不能使用模板布局和模板继承
{include file="../application/index/view/index/test.html" /}

内置标签

  1. 输出循环标签volist,offset表示从第几个数开始查询(不包括),length表示查询的长度,数据的条数
$list=UserModel::all();
            $this->assign('list',$list);
            echo gettype($list).'<hr>';
            return $this->fetch();
<body>
{volist name='list' id='vo' offset='1' length='1'}
      {$vo.id}===>{$vo.name}
{/volist}
</body>

路由规则

  1. 在route.php配置文件中配置路由规则,在首页返回的数据
Route::get('/',function(){
    return 'Hello,world!';
});
  1. 访问一个哦控制器中的方法,在网址后直接输入 new /1(任意一个数据),就会访问index模块下面的news控制器中的list方法;第三个参数是请求方法(GET,POST等,请求类型必须大写)
Route::rule('new/:id','index/News/read');

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

Route::get('new/:id','index/News/read');
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容

  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,373评论 0 17
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,737评论 1 92
  • ThinkPHP 5.0--基础篇****(视图和模版) 一、视图view i. 主要展示界面 可以接受用户输入...
    donglingjiu阅读 8,099评论 0 6
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,093评论 1 32
  • 早上来了我,自习室,不知道这三天的效率会怎么样。 室友出去玩真是万幸,感觉效率好多了。回来之后又要遭殃了,那就出来...