ThinkPHP 6 视图:从零开始

news/2025/1/3 5:34:52/

框架6.0默认只能支持PHP原生模板,如果需要使用thinkTemplate模板引擎,需要安装think-view扩展(该扩展会自动安装think-template依赖库)。

PHP原生模板

1.配置文件

默认设置为Think,因为没有安装,直接使用会报错;使用php原生模板,需要修改配置目录的view.php文件的模板引擎为`php`(多应用则是相应的应用下view.php):

2.报错提示

3.修改模板引擎

// 模板引擎类型使用Think
'type'          => 'php',

4.模板渲染

这里做一个简单示例,TP的模板渲染会做更详细讲解,因为php原生模板变量渲染与常规TP不同,故作此示例:

5.控制器文件

// 添加引用
use think\facade\View;
// 变量赋值
View::assign('name', '张三');
// 模板输出
return View::fetch('user/index');

6.视图文件

user/index.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>用户详情</title>
</head>
<body><h1>用户详情</h1><p>我是<?php echo $name ?></p>
</body>
</html>

TP模板引擎

1.安装

composer require topthink/think-view

2.配置文件

安装完成后,在配置目录的view.php文件中进行模板引擎相关参数的配置

(多应用则是相应的应用下view.php),例如:

return [// 模板引擎类型使用Think'type'          => 'Think',// 默认模板渲染规则 1 解析为小写+下划线 2 全部转换小写 3 保持操作方法'auto_rule'     => 1,// 模板目录名'view_dir_name' => 'view',// 模板后缀'view_suffix'   => 'html',// 模板文件名分隔符'view_depr'     => DIRECTORY_SEPARATOR,// 模板引擎普通标签开始标记'tpl_begin'     => '{',// 模板引擎普通标签结束标记'tpl_end'       => '}',// 标签库标签开始标记'taglib_begin'  => '{',// 标签库标签结束标记'taglib_end'    => '}',
];

比如我习惯模板变量标签是两个花括号,改一下这里就行

// 模板引擎普通标签开始标记
'tpl_begin'     => '{{',
// 模板引擎普通标签结束标记
'tpl_end'       => '}}',
// 标签库标签开始标记
'taglib_begin'  => '{{',
// 标签库标签结束标记
'taglib_end'    => '}}',

模板变量

View门面全局变量赋值

public function index()
{// 单次赋值View::assign('name', '张三');// 批量赋值View::assign(['gender' => '男', 'school' => '本科']);// 输出模板return View::fetch('user/index');
}

View门面当前模板赋值

public function index()
{// 输出模板return View::fetch('user/index', ['name' => '张三','gender' => '男','school' => '本科']);
}

助手函数当前模板赋值

public function serviceContractPreview()
{// 输出模板return view('user/index', ['name' => '张三','gender' => '男','school' => '本科']);
}

模板渲染

模板路径

默认设置的模板目录名是`view`,如果没有特殊需求,不建议更改:

// 模板目录名
'view_dir_name' => 'view',

单应用

├─app│   └─view(视图目录)│     ├─index            index控制器视图目录│     │  └─index.html    index模板文件│     └─ ...             更多控制器视图目录

多应用

├─app│  ├─app1 (应用1)│  │   └─view(应用视图目录)│  │     ├─index            index控制器视图目录│  │     │  └─index.html    index模板文件│  │  └─ ...             更多控制器视图目录│  ││  └─ app2... (更多应用)

简单渲染

自动定位当前控制器视图目录下的index视图文件

public function index()
{return View::fetch();// 或者return view();}

当前控制器下其他模板

定位的是当前控制器视图目录下的user视图文件

public function index()
{return View::fetch('user');// 或者return view('user');}

其他控制器下的模板

定位的是其他控制器视图目录下模板文件;

控制器不存在只要视图目录和文件存在,也可以访问。

public function index()
{return View::fetch('user/index');// 或者return view('user/index');}

视图根目录模板

public function index()
{return View::fetch('/user');// 或者return view('/user');}

相对定位下模板访问

相对的是入口文件index.php所在位置

public function index()
{return View::fetch('../user/index.html');// 或者return view('../user/index.html');}

只渲染内容

public function index()
{// 此时要用单引号 双引号会解析变量$content = '我是{{$name}}<br/>性别{{$gender}}';return View::display($content, ['name' => '张三', 'gender' => '男']);}

提取模板内容

返回模板解析变量后的html字符串,可用于创建pdf、word文件

public function index()
{$content = view('user/index', ['name' => '张三'])->getContent();}

视图过滤

View门面

public function index()
{// 使用视图输出过滤$name = ['name' => "\r\n精\r\n忠\r\n报\r\n\r\n国"];return View::filter(function($name){return str_replace("\r\n",'<br/>',$name);})->assign($name)->fetch('user/index');
}

view助手函数

public function index()
{$name = ['name' => "\r\n精\r\n忠\r\n报\r\n\r\n国"];return view('user/index', $name)->filter(function($name){return str_replace("\r\n",'<br/>',$name);});
}

说明:

效果是把符号`\r\n`替换为html标签`<br/>`换行;这里只是举例,也可以对要渲染的数据做xss攻击的字符串过滤。

切换模板引擎

1.Engine初始化

视图类提供了engine方法对模板解析引擎进行初始化来切换不同的模板引擎:

使用门面View(think\facade\View)

没有变量赋值,直接输出模板

namespace app\index\controller;use think\facade\View;class Index
{public function index(){// 使用内置PHP模板引擎渲染模板输出return View::engine('php')->fetch();}
}

如果有变量赋值

namespace app\index\controller;use think\facade\View;class Index
{public function index(){// 初始化内置PHP模板引擎View::engine('php');// 变量赋值View::assign('name', '张三');// 模板输出return View::fetch('index');}
}

2.Config信息修改

如果需要动态改变模板引擎的参数,请使用视图类提供的config方法进行动态设置。

namespace app\index\controller;use think\facade\View;class Index
{public function index(){// 改变当前操作的模板路径View::config(['type' => 'php']);// 变量赋值View::assign('name', '张三');// 模板输出return View::fetch('index');}
}

总结:

ThinkPHP视图的使用很简单,但是如果要在默认的基础上做一些改变,就需要一些时间去摸索;阅读本篇文章,可以节省时间更快的实现你的视图需求;如果还有不会的,可以私信与我探讨。


http://www.ppmy.cn/news/23322.html

相关文章

【数据结构】二叉搜索树BSTree

文章目录一、概念二、基础操作1.查找find2.插入Insert3.中序遍历InOrder4.删除erase三、递归写法1.递归查找2.递归插入3.递归删除四、应用五、题目练习一、概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树: 若它的左子树不…

thinkphp关于模型一对多,多对多,多对一的使用

首先看看thinkphp5.0的模型介绍这里关联有一对一&#xff0c;多对多&#xff0c;一对多&#xff0c;多对一。还有预载入&#xff08;就是查询预写好&#xff0c;php界面调用时候才查询&#xff09;还有关联统计&#xff0c;聚合等。这里只讲解通过一对一的预载入&#xff0c;推…

Day19 C++STL入门基础知识十一——map、multimap容器 构造赋值、大小交换、插入删除、查找统计、排序【全面深度剖析+例题代码展示】

&#x1f483;&#x1f3fc; 本人简介&#xff1a;男 &#x1f476;&#x1f3fc; 年龄&#xff1a;18 ✍每日一句&#xff1a;【道固远&#xff0c;笃行可至&#xff1b;事虽巨&#xff0c;坚为必成】 文章目录1. 基本概念2. 构造赋值① 函数原型② 代码展示③ 测试结果3. 大小…

初次认识C++类

目录 前言&#xff1a; 面向过程和面向对象的区别&#xff1a; C语言&#xff1a; C&#xff1a; 类的引入&#xff1a; 类的定义&#xff1a; 类的权限&#xff1a; 类的作用域&#xff1a; 类的实例化&#xff1a; 类的大小计算&#xff1a; 空类或则只…

前端基础html css js

html&#xff1a;框架 css&#xff1a;美化 jp&#xff1a;交互 HTML 1.基础标签 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>这是我的滴滴滴一个网页</title></head><body><h1>一号 标题&…

ROS2机器人编程简述humble-第四章-The TF Subsystem

这个是ROS2机器人的核心工具之一。概念&#xff1a;TF&#xff08;坐标系转换&#xff09;子系统是ROS2机器人框架中的一个重要组件&#xff0c;它的功能是提供坐标系转换服务&#xff0c;使得不同坐标系之间的数据可以转换。比如&#xff0c;机器人的传感器可以产生的数据是基…

【JavaEE】Java中复杂的Synchronized关键字

目录 一、synchronized的特性 &#xff08;1&#xff09;互斥 &#xff08;2&#xff09;刷新内存 &#xff08;3&#xff09;可重入 二、synchronized的使用 &#xff08;1&#xff09;修饰普通方法 &#xff08;2&#xff09;修饰静态方法 &#xff08;3&#xff09;修…

JDK8 新特性详解,2014-03-18 正式发布

简介&#xff1a;JDK8 的主要新特性六个&#xff1a;Lambda、Stream、Date、新注解、函数编程、并发&#xff0c;前两者主要用于集合中。 1、Lambda 演变过程 Data ToString NoArgsConstructor AllArgsConstructor public class Student { //名字 private String name; //性别…