ThinkPHP6,视图的安装及模板渲染和变量赋值 view::fetch() ,view::assgin() ,助手函数

简介: 本文介绍了ThinkPHP6中视图的安装和使用,包括通过`composer`安装`topthink/think-view`,使用`view::fetch()`进行模板渲染和变量赋值,以及使用`view::assign()`进行全局模板变量赋值。还提到了助手函数作为`view::fetch()`和`view::assign()`的封装组合,但效率较低。

ThinkPHP6,视图的安装及模板渲染和变量赋值

tp6视图功能由\think\View类配合视图驱动(也即模板引擎驱动)类一起完成,新版仅内置了PHP原生模板引擎(主要用于内置的异常页面输出),如果需要使用其它的模板引擎需要单独安装相应的模板引擎扩展。

使用think-template模板引擎,只需要安装think-view 模板引擎驱动。

composer require topthink/think-view

视图相关的配置在配置目录的view.php配置文件中进行定义。

通常可以直接使用think\facade\View来操作视图。

视图的安装

首先,我们切换到tp6框架安装的目录,然后通过cmd命令窗口(composer require topthink/think-view)将think-view模板引擎驱动安装。

在这里插入图片描述
在这里插入图片描述

不出意外,安装成功!

模板渲染和变量赋值

在安装好think-view后,我们就可以使用控制器来将不同的请求转到不同的视图了,并且可以传递一些参数过去。比如在原有的index.php控制器中,修改对应的一些方法,然后返回不同的视图,(最常用的是 view::fetch() view::assign() )。

首先来看下view.php中的源码:

<?php

declare (strict_types = 1);

namespace think\facade;

use think\Facade;

/**
 * @see \think\View
 * @package think\facade
 * @mixin \think\View
 * @method static \think\View engine(string $type = null) 获取模板引擎
 * @method static \think\View assign(string|array $name, mixed $value = null) 模板变量赋值
 * @method static \think\View filter(\think\Callable $filter = null) 视图过滤
 * @method static string fetch(string $template = '', array $vars = []) 解析和获取模板内容 用于输出
 * @method static string display(string $content, array $vars = []) 渲染内容输出
 * @method static mixed __set(string $name, mixed $value) 模板变量赋值
 * @method static mixed __get(string $name) 取得模板显示变量的值
 * @method static bool __isset(string $name) 检测模板变量是否设置
 * @method static string|null getDefaultDriver() 默认驱动
 */
class View extends Facade
{
   
    /**
     * 获取当前Facade对应类名(或者已经绑定的容器对象标识)
     * @access protected
     * @return string
     */
    protected static function getFacadeClass()
    {
   
        return 'view';
    }
}

1. view::fetch()

view::fetch() 的方法,如果不填写参数的话,则默认会查找当前项目的view视图目录,然后再根据控制器/方法名.html找到对应的html页面。

<?php
namespace app\controller;

use app\BaseController;
use think\facade\View; // 使用模板引擎
class Index extends BaseController
{
   
    public function index()
    {
   
        // 按照默认的视图解析流程
        // 找到当前目录下的view视图目录
        // 规则是 控制器名(小写+下划线)/方法名.html
        return view::fetch();
    }

    public function hello($name = 'ThinkPHP6')
    {
   
        return 'hello,' . $name;
    }

    public function home(){
   
        return view::fetch();
    }
}

因为上面只有两个方法返回了视图层,所以新建两个对应的html页面(view/index/home.html 和 view/index/index.html)。

在这里插入图片描述

  1. view/index/home.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
  <h2>我是home页</h2>
</body>
</html>

2.view/index/index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>我是index页</h1>
</body>
</html>

接下来,到浏览器中访问,看是否配置正确

在这里插入图片描述

在这里插入图片描述

通过view::fetch() 传入参数,并且通过前端进行渲染

在这里插入图片描述

Login.php 控制器

<?php
namespace app\controller;

use app\BaseController;
use think\facade\View; // 使用模板引擎

class Login extends BaseController
{
   
    public function login()
    {
   
        // view::fetch('视图名',[传递参数列表])
        return view::fetch('login',[
             'name'=>'小白',
             'gender'=>'男',
             'phone'=>'17789120921'
        ]);
    }


}

创建对应的前端页面 view/login/login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!--  通过 {$键} 的方式获取从view::fetch() 传递过来的参数-->
<div>
    <p>{$name}</p>
    <p>{$gender}</p>
    <p>{$phone}</p>
</div>
</body>
</html>

2. view::assgin()

使用view::assgin() 方法进行全局模板变量赋值,通过{$键}的方式来模板输出。

对上面的login.php控制器进行修改,如下:

<?php
namespace app\controller;

use app\BaseController;
use think\facade\View; // 使用模板引擎

class Login extends BaseController
{
   
    public function login()
    {
   
        // view::fetch('视图名',[传递参数列表])
        return view::fetch('login',[
             'name'=>'小白',
             'gender'=>'男',
             'phone'=>'17789120921'
        ]);
    }


    // 新增 view::assign()
    public function login2(){
   
        view::assign('name','小黑');
        view::assign('gender','女');
        view::assign('phone','15025679910');
        // 这里我们将Login2的渲染页面也指定为login.html
        return view::fetch('login');
    }
}

在这里插入图片描述

3. 助手函数

助手函数不建议使用,效率较低,实际上它是view::fetch() 和 view::assgin() 的组合封装

如下:

<?php
namespace app\controller;

use app\BaseController;
use think\facade\View; // 使用模板引擎

class Login extends BaseController
{
   
    public function login()
    {
   
        // view::fetch('视图名',[传递参数列表])
        return view::fetch('login',[
             'name'=>'小白',
             'gender'=>'男',
             'phone'=>'17789120921'
        ]);
    }


    // 新增 view::assign()
    public function login2(){
   
        view::assign('name','小黑');
        view::assign('gender','女');
        view::assign('phone','15025679910');
        // 这里我们将Login2的渲染页面也指定为login.html
        return view::fetch('login');
    }

    // 新增 助手函数
    public function login3(){
   
        return view('login',[
            'name'=>'小帅',
            'gender'=>'男',
            'phone'=>'19723911071'
        ]);
    }
}

在这里插入图片描述


未完待续!!!!

相关文章
|
移动开发 Android开发 iOS开发
uniapp开发H5及app监听返回事件(以及监听不到的处理方法)
uniapp开发H5及app监听返回事件(以及监听不到的处理方法)
3029 0
|
SQL 关系型数据库 MySQL
ThinkPHP6 连接使用数据库,增删改查,find,select,save,insert,insertAll,insertGetId,delete,update方法的用法
本文介绍了在ThinkPHP6框架中如何连接和使用数据库进行增删改查操作。内容包括配置数据库连接信息、使用Db类进行原生MySQL查询、find方法查询单个数据、select方法查询数据集、save方法添加数据、insertAll方法批量添加数据、insertGetId方法添加数据并返回自增主键、delete方法删除数据和update方法更新数据。此外,还说明了如何通过数据库配置文件进行数据库连接信息的配置,并强调了在使用Db类时需要先将其引入。
ThinkPHP6 连接使用数据库,增删改查,find,select,save,insert,insertAll,insertGetId,delete,update方法的用法
|
8月前
|
自然语言处理 测试技术 API
TCPDF库详解:功能、作用及多语言安装指南-tcpdf可不是只有php能用-优雅草卓伊凡
TCPDF库详解:功能、作用及多语言安装指南-tcpdf可不是只有php能用-优雅草卓伊凡
656 5
|
8月前
|
监控 安全 应用服务中间件
网站出现“SSL handshake failed“?SSL握手失败(525)的错误修复指南
本文详细解析了Cloudflare中常见的SSL握手失败(525)错误,从问题定义到根源分析,再到具体解决方案,提供了一站式修复指南。通过检查证书域名匹配、有效性及时钟同步等问题,结合Nginx/Apache配置调整与Cloudflare设置优化,帮助用户彻底解决525错误。同时,文章还提供了预防措施,如自动续期和SSL状态监控,确保网站长期稳定运行。跟随步骤操作,可有效避免SSL相关故障,保障网站安全访问。
5992 0
网站出现“SSL handshake failed“?SSL握手失败(525)的错误修复指南
|
10月前
|
中间件 PHP
在ThinkPHP框架中解决跨域问题的三种方法
以上就是在ThinkPHP框架中解决跨域问题的三种方法。希望这些方法能帮助你解决你的问题。
709 11
thinkPhP6.0安装教程图解--PHP框架安装
本文是一篇关于ThinkPHP 6.0安装教程的图解,包括环境检查、安装Composer、修改Composer镜像地址、安装ThinkPHP框架以及启动运行ThinkPHP的步骤。文章详细描述了每个步骤的操作方法,并提供了相应的命令和截图,帮助用户理解并顺利完成ThinkPHP 6.0的安装和运行。
thinkPhP6.0安装教程图解--PHP框架安装
|
Shell Linux Docker
Docker -v 挂载主机目录到容器中(及数据卷容器)
Docker -v 挂载主机目录到容器中(及数据卷容器)
821 0
ThinkPHP6的控制器定义及控制器初使用
本文介绍了ThinkPHP6框架中控制器的定义和初步使用方法。内容包括控制器的文件位置、命名规范、如何改变控制器目录名、单应用模式下的项目访问路径,以及控制器类文件的实际位置和访问URL的示例。文章还提到了ThinkPHP的控制器类可以灵活定义,无需继承任何基础类库,但建议继承一个基础的控制器类以方便扩展。控制器名不区分大小写,并且支持驼峰命名转下划线的方式。
ThinkPHP6的控制器定义及控制器初使用
|
小程序 前端开发 中间件
ThinkPHP 配置跨域请求,使用TP的内置跨域类配置,小程序和web网页跨域请求的区别及格式说明
本文介绍了如何在ThinkPHP框架中配置跨域请求,使用了TP内置的跨域类`\think\middleware\AllowCrossDomain::class`。文章还讨论了小程序和web网页在跨域请求格式上的区别,并提供了解决方案,包括修改跨域中间件源码以支持`Origin`和`token`。此外,还介绍了微信小程序跨域请求的示例和web网页前端发送Axios跨域请求的请求拦截器配置。
ThinkPHP 配置跨域请求,使用TP的内置跨域类配置,小程序和web网页跨域请求的区别及格式说明
|
前端开发 PHP
ThinkPHP6布局的方式之模板布局,全局配置方式,模板标签方式,动态方法布局
本文介绍了ThinkPHP6中实现模板布局的三种方式:全局配置方式、模板标签方式和动态方法布局,并通过示例代码展示了如何在项目中应用这些布局方式。
ThinkPHP6布局的方式之模板布局,全局配置方式,模板标签方式,动态方法布局