ThinkPHP5 模板渲染

来源:互联网 发布:linux查看文件权限 编辑:程序博客网 时间:2024/05/17 01:26
视图实例化

视图操作其实都是同过think\View类完成,但一般情况下无需自己实例化视图类,
如果你的控制器类继承了think\Controller的话,会自动实例化视图类并赋值给view属
性而且封装了视图类的主要方法,一般用法如下:
<?php
namespace app\index\controller;
use think\Controller;

class Index extends Controller
{
    public function index()
    {
        return $this->fetch();
    }
}

为了配合控制器的输出,你需要在apps/index/view/index目录下面创建一个html模板文件。

正常访问控制器的index操作方法会输出
hello,world!

如果你没有继承系统的控制器基类,那么最好的建议是你直接使用  view助手函数进行模板操作,view函
数可以完成模板的渲染输出、变量赋值以及字符替换等常用功能,既省心又好用(助手函数其实是调用的
think\response\View类实现),用法如下:
<?php

namespace app\index\controller;
class Index
{
    public function index()
    {
        return view();
    }
}

除非你很清楚应该怎么实例化视图类并正确传入配置参数,
否则不推荐手动实例化视图,下面是手动实例化的参考代码:
<?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'));
        return $view->fetch();
    }
}


视图类的实例化需要传入两个参数:第一个参数是模板引擎的配置,第二个参数是模板替换参数,
更详细的用法我们后面会描述。

模板文件定位

提到模板渲染,就一定得先了解ThinkPHP的模板文件是如何自动定位的,前面的三种方式的控
制器代码中我们都没有明确指定要渲染的模板文件,那么系统又是如何自动定位的呢?
首先要从视图的目录结构开始谈起,我们知道模块的默认目录结构如下:
├─apps                   应用目录  
│  ├─index              模块目录  
│  │  ├─controller      控制器目录  
│  │  ├─model           模型目录  
│  │  └─view            视图目录

view目录就是默认的模块视图文件目录,下面的视图文件的命名规则(注意不是固定,是默认规则而已)
就是 控制器名/操作名.html,其中控制器和操作名都是小写+下划线的规范,
也就是说按照下面的对应关系来自动对应视图文件:
控制器名    操作名    对应视图文件
Index        index    index/index.html
User        index    user/index.html
UserType    index    user_type/index.html
UserType    getInfo    user_type/getinfo.html
因此,大部分情况下,我们在模板渲染输出的时候,如果没有指定模板文件,
就会按照上面的默认规则自动定位,如何自定义渲染模板以及调整视图目录结
构参考后面的内容。
如果关闭了URL自动转换的话,视图文件的文件名可能会根据实际的操作名而变
化(大小写和URL访问的操作名一致)。
不过默认的这个规则是可以重新定义的,关键是由视图实例化的时候传入的模板引擎参数决定。
如果你继承了系统的控制器基类或者使用助手函数的话,模板引擎的配置参数是在应用配置文件
中设置的,默认的配置参数如下(这里列出的仅仅是可能会影响视图文件的参数):
'template'=> [  
// 模板引擎类型支持php think 支持扩展    
'type'         => 'Think',  
// 视图基础目录,配置目录为所有模块的视图起始目录    
'view_base'    => '',  
// 当前模板的视图目录 留空为自动获取    
'view_path'    => '',  
// 模板后缀    
'view_suffix'  => 'html',  
// 模板文件名分隔符    
'view_depr'    => DS,  ],

如果你手动实例化的话,要么获取配置参数传入,要么自己传入相关参数。

type参数决定了当前应用使用什么模板引擎,默认的是ThinkPHP内置的模板引擎,
你也可以配置使用php原生文件作为模板,无论使用内置模板引擎还是php原生模板,
视图文件的定位规则都是一样的。
view_base参数用于配置所有模块的视图起始目录,一旦设置该参数的话,
视图目录将独立于应用目录,假设我们设置如下
'view_base'    => ROOT_PATH . 'template' . DS

那么系统的视图目录结构就会变成:
├─apps                   应用目录  
│  ├─index              模块目录  
│  │  ├─controller      控制器目录  
│  │  └─model           模型目录  
├─template           视图目录  
│  ├─index              模块目录  
│  │  ├─controller      控制器目录  
│  │  └─...            更多控制器目录

view_path参数用于配置当前模块的视图目录(如果同时配置view_base和view_path的话,view_base是优先),
一般无需配置,会自动判断当前模块的视图目录,也就是application/当前模块/view/,如果要配置,
一般是在模块的配置文件中设置,例如:
'template' => [  
// 当前模板的视图目录 留空为自动获取    
'view_path'    =>    APP_PATH . 'index' . DS . 'template' . DS,  
],

则index模块的视图目录结构变成:
├─apps                   应用目录  
│  ├─index              模块目录  
│  │  ├─controller      控制器目录  
│  │  ├─model           模型目录  
│  │  └─template        视图目录


view_suffix参数用于配置视图文件的后缀名,默认为html,例如你可以配置为tpl:
'view_suffix'    =>  'tpl'

view_depr用于配置视图文件的目录分隔符,默认采用DS(这是一个系统自定义常量,
表示DIRECTORY_SEPARATOR)也就是目录的方式存储,如果我们设置了下面的参数:

'template' => [  
// 模板引擎类型 支持phpthink支持扩展    
'type'         => 'Think',  
// 视图基础目录,配置目录为所有模块的视图起始目录    
'view_base'    => '',  
// 当前模板的视图目录 留空为自动获取    
'view_path'    => '',  
// 模板后缀    
'view_suffix'  => 'tpl',  
// 模板文件名分隔符    
'view_depr'    => '_',  ],


原来的视图文件和调整后的对应关系如下:
原来视图文件            调整后视图文件
index/index.html        index_index.tpl
user/index.html            user_index.tpl
user_type/index.html    user_type_index.tpl
user_type/getinfo.html    user_type_getinfo.tpl

原创粉丝点击