当前位置: 首页 > news >正文

11.thinkphp的模板

一.引擎驱动

1. MVC中,M(模型)和C(控制器)是前面我们所了解的内容,而V(视图)就是页面;

2. TP6.0默认不自带TT模版引擎,它作为一个可选的扩展给开发人员安装;

3. 也就是说,并不一定非要使用模板引擎的语法规则来开发V(视图)部分;

4. 如果不用模版引擎,可以在控制器通过require()方法引入PHP文件混编即可;

那么有很多数据,怎么和前端通信呢?

解决:

============================================

也可以通过依赖注入:

5. 如果要使用模版引擎,先创建一个用于测试模板引擎的控制器:Show.php;

6. 写入模版引擎的调用语法,来判断,是否已经安装了模板引擎扩展;

return View::fetch('index'); //出现缺少驱动的错误

7. 然后,安装如下驱动后,再刷新页面即可;

composer require topthink/think-view

二.赋值变量

1. 在控制器区域,通过assign()设置一个向模版提供变量的赋值操作;

View::assign('name', 'Mr.Lee');

2. 而模版区域,只需要通过{$name}的语法即可获取到控制器设置的值; {$name}

3. assign()方法,支持通过数组的方式,传递模版变量;

View::assign(['name' => 'Mr.Lee','age' => 100]);

4. 也可以直接通过fetch()方法的第二参数,直接用数组传递模版变量;

return View::fetch('index', ['name' => 'Mr.Lee','age' => 100]);

5. 助手函数view(),和View::fetch()一样;

return view('index', [...]);

6. 可以使用filter()方法,对所有模版的变量进行过滤操作;

return View::filter(function ($content) {return strtoupper($content);})->fetch('index');return view('index')->filter(function ($content) {return strtoupper($content);});

这个content指的是把所有变量传递过去,也就是

View::assign([
 'name' => 'Mr.Lee',
 'age' => 100
 ]);

======================================================================

模板赋值

模板中的变量(除了一些系统变量外)必须先进行模板赋值后才能使用,可以使用assign方法进行全局模板变量赋值。

namespace app\controller;use think\facade\View;class Index
{public function index(){// 模板变量赋值View::assign('name','ThinkPHP');View::assign('email','thinkphp@qq.com');// 或者批量赋值View::assign(['name'  => 'ThinkPHP','email' => 'thinkphp@qq.com']);// 模板输出return View::fetch('index');}
}

assign方法赋值属于全局变量赋值,如果你需要单次赋值的话,可以直接在fetch方法中传入。

namespace app\controller;use think\facade\View;class Index
{public function index(){// 模板输出并变量赋值return View::fetch('index', ['name'  => 'ThinkPHP','email' => 'thinkphp@qq.com']);}
}

助手函数

如果使用view助手函数渲染输出的话,可以使用下面的方法进行模板变量赋值:

return view('index', ['name'  => 'ThinkPHP','email' => 'thinkphp@qq.com'
]);

助手函数的变量赋值也是当次模板渲染有效

一.模版配置

1. 默认情况下,config/view.php就是默认模版引擎的配置文件;

2. 内部的配置注释写的非常清楚了,一般情况下,不需要任何改动;

二.模版渲染

1. 除了在配置文件修改外,还可以在控制器端动态修改模版配置;

View::config(['view_dir_name' => 'view2']);

config里面的放置view_dir_name,更改view2目录

那这样子就是动态修改

2. 默认情况下,调用的是本控制器的模版文件,也可以调用其它控制器的模版文件;

return View::fetch('Address/index');

使用fetch指定控制器的话:

就会跳到指定的控制器目录

3. 如果你是多模块(多应用)模式下,也可以实现跨模块调用模版文件;

return View::fetch('admin@User/index');

4. 如果直接在view 根目录下的模版文件,用一个斜杠来设定即可调用;

return View::fetch('/index');

5. 如果想调用public公共目录的模版文件,用../public后面跟着URL即可;

return View::fetch('../public/test/test);

6. 这种做法的调用方式,和模版引擎调用一样,只不过通信的数据获取方式有差异;

return View::engine('php')->fetch('index');

7. 第二种原生PHP执行方式,在return之前设置的变量或者模版变量均无效;

8. 而是把所有的要传递的变量,通过fetch()的第二个参数传递;

return View::engine('php')->fetch('index', ['name' => 'Mr.Lee','age' => 100]);

使用原生的php,只能把变量放置在fetch第二个参数之内,才能传递。

如果是使用原生,那么就得改成php后缀,index.html=index.php

一.变量输出

1. 当程序运行的时候,会在runtime/temp目录下生成一个编译文件;

2. 默认情况下,输出的模版变量会自动进行过滤,过滤函数默认如下:

<?php echo htmlentities($name); ?>

3. 如果传递的值是数组,在模版区域可以使用$data.name这种形式输出;

$arr = ['name'=>'Mr.Lee', 'age'=>100];return View::fetch('output', ['arr' => $arr]);{$arr.name}--{$arr.age}//模版数组变量输出
<?php echo htmlentities($arr['name']); ?>//编译文件

编译文件和php的原生代码是一致的。

4. 如果传递的值是对象,那么编译文件也会自动相应的对应输出方式;

public $name = 'Mr.Lee';public $age = 'age';const PI = 3.14;return View::fetch('output', ['obj' => $this,]);{$obj->name}--{$obj->age}--{$obj->fn()}--{$obj::PI}<?php echo htmlentities($obj->name); ?>//编译文件

注意:静态调用方法得有start。也就是两个冒号::得用静态或者常量

二.其它输出

1. 如果输出的变量没有值,可以直接设置默认值代替;

{$data.name|default='没有姓名'}

2. 系统变量有:$_SERVER、$_ENV、$_GET、$_POST、$_REQUEST、$_SESSION和$_COOKIE;

3. 对于注入Request对象,也可以直接在模版输出;

{$Request.get.id}{$Request.param.name}{$Request.host}

4. 常量、配置信息等都可以通过$Think输出;

{$Think.const.PHP_VERSION}{$Think.PHP_VERSION}{$Think.config.app.app_host}{$Think.config.session.name}

相关文章:

  • java将pdf转换成word
  • 3DGS之齐次坐标
  • 用户模块-SpringEvent观察者模式
  • ToB标杆!容联云入选量子位「2025中国AIGC应用报告」
  • CSS内边距、外边距、边框
  • 深入微服务核心:从架构设计到规模化
  • CSS初识
  • Android仿今日头条Kotlin版本
  • 机器学习算法-分类决策树
  • vue项目中使用tinymce富文本编辑器
  • CSS3 基础(边框效果)
  • 【Unity笔记】Unity 编辑器扩展:一键查找场景中组件引用关系(含完整源码)(组件引用查找工具实现笔记)
  • Prompt 结构化提示工程
  • React组件测试完全指南:从入门到实践
  • vue3+dhtmlx 甘特图真是案例
  • 数据一致性问题剖析与实践(二)——单机事务的一致性问题
  • 数据为基:机器学习中数值与分类数据的处理艺术及泛化实践
  • MacOS中安装Python(homebrew,pyenv)
  • Stable Baselines3 结合 gym 训练 CartPole 倒立摆
  • 【教学类-102-17】蝴蝶三色图(用最大长宽作图,填入横板和竖版共16个WORD单元格模版大小,制作大小图)
  • 上海五五购物节首次推出商圈精品推广节,9个商圈近百个商场参与促销
  • 基辅响起密集爆炸声,乌方称俄军发动大规模导弹袭击
  • 特朗普激发加拿大爱国热情:大选提前投票人数创纪录,魁北克分离情绪被冲淡
  • 印控克什米尔发生恐袭事件,外交部:中方反对一切形式的恐怖主义
  • 美国务卿宣布将对美国务院进行全面重组
  • 伊朗外长访华将会见哪些人?讨论哪些议题?外交部回应