ThinkPHP5 模板渲染

来源:互联网 发布:c语言源程序的扩展名 编辑:程序博客网 时间:2024/05/16 18:38
模板变量赋值

在进行模板渲染之前,一般需要对模板变量进行赋值,也就是说模板里面输出的变量
是必须先赋值到模板才能调用(除了一些系统默认支持的系统变量可以直接使用外),
使用未赋值的模板变量会抛出变量未定义异常。
模板变量赋值其实最终都是调用的视图类的  assign方法,如果控制器已经继承了系
统的控制器基类,则可以直接使用下面的方式赋值模板变量。
<?php
namespace app\index\controller;
use think\Controller;

class Index extends Controller
{
    public function index()
    {
        // 给模板变量name赋值          
        $this->assign('name', 'thinkphp');
        // 批量赋值          
        $this->assign([
            'name' => 'thinkphp',
            'email' => 'thinkphp@qq.com'
        ]);
        return $this->fetch();
    }
}

模板文件中输出变量的方式(忽略其它的html代码):
名称:{$name}  邮箱:{$email}

如果使用的是助手函数的话,则采用下面的方式赋值模板变量:
<?php
namespace app\index\controller;
class Index
{
    public function index()
    {
        // 使用助手函数批量赋值模板变量          
        return view('', ['name' => 'thinkphp', 'email' => 'thinkphp@qq.com']);
    }
}


我们上一讲已经讲过view助手函数的返回值是一个Response对象,
因此还可以使用assign方法进行模板变量赋值:
<?php

namespace app\index\controller;
class Index
{
    public function index()
    {
        // 使用助手函数批量赋值模板变量          
        return view()->assign(['name' => 'thinkphp', 'email' => 'thinkphp@qq.com']);
    }
}

如果是自己实例化的视图类,那么赋值变量的方式如下:
<?php

namespace app\index\controller;
use think\Config;
use think\View;

class Index
{
    public function index()
    {
        $view = new View(Config::get('template'), Config::get('view_replace_str'));
        $view->assign('name', 'thinkphp');
        $view->assign(['name' => 'thinkphp', 'email' => 'thinkphp@qq.com']);
        return $view->fetch();
    }
}

系统变量及请求变量可以无需赋值而直接在模板中使用(针对内置模板引擎而言,其它请忽略),例如:
输出系统变量$_POST['name']
{$Think.post.name}

输出$_SESSION['user_id']
{$Think.session.user_id}

输出系统常量
{$Think.const.APP_PATH}

$Think.变量输出标签支持输出$_SERVER、$_ENV、$_POST、$_GET、$_REQUEST、
$_SESSION和$_COOKIE变量,以及配置参数和常量。
新版引入了一个新的机制用于输出当前请求对象的相关变量:
{$Request.post.name}  {$Request.session.user_id}  {$Request.route.name}  {$Request.root}

$Request.表示调用当前请求对象实例,后面的post、session、route以及root其实是请求对象
的一个方法名,后面的字符串是方法的第一个参数,支持多级变量输出,例如:
{$Request.post.user.user_name}

其实相当于调用如下的方法:
echo Request::instance()->post('user.user_name');

注意必须严格区分大小写的使用  $Think和  $Request,这样设计是尽量避免和其它赋值的模板变量冲突。
更多的变量输出和模板标签的使用请参考官方的完全开发手册。

原创粉丝点击