当前位置:   article > 正文

thinkphp5——视图与模板_$this->view->fetch("hello");是什么意思

$this->view->fetch("hello");是什么意思

一 视图

视图功能由\think\View类配合视图驱动(模板引擎)类一起完成

1 视图实例化

(1) 控制器里调用视图类的方法

如果你的控制器继承了\think\Controller类的话,则无需自己实例化视图类

return $this->fetch();   // 渲染模板输出

下面的方法可以直接被调用

 

PS  如果需要在控制器里调用View类的其它方法,可以直接使用 $this->view  得到view对象

(2) 直接实例化视图类(很少使用)

$view = new think\view();

(3) 助手函数view()

return view('hello',['name'=>'thinkphp']);

2 内置模板引擎

配置文件

  1. 'template' => [
  2. 'type' => 'Think', // 模板引擎类型 支持 php think 支持扩展
  3. 'view_path' => './template/', // 模板路径
  4. 'view_suffix' => 'html', // 模板后缀
  5. 'view_depr' => DS, // 模板文件名分隔符
  6. 'tpl_begin' => '{', // 模板引擎普通标签开始标记
  7. 'tpl_end' => '}', // 模板引擎普通标签结束标记
  8. 'taglib_begin' => '{', // 标签库标签开始标记
  9. 'taglib_end' => '}', // 标签库标签结束标记
  10. ],

视图文件的根目录默认情况下位于模块的view目录,每个模块的视图目录可以通过模板参数view_path自定义

3 模板赋值

  1. $this->assign('name','ThinkPHP'); // 模板变量赋值
  2. return $this->fetch('index', [
  3. 'name' => 'ThinkPHP',
  4. ]);
  5. 或者
  6. return $this->display($content, [
  7. 'name' => 'ThinkPHP',
  8. ]);
  9. //如果使用view助手函数渲染输出
  10. return view('index', [
  11. 'name' => 'ThinkPHP',
  12. //支持在任何地方使用静态方法进行模板变量赋值
  13. think\View::share('name','value');

4 模板渲染

fetch('[模板文件]'[,'模板变量(数组)'])

用法描述
不带任何参数自动定位当前操作的模板文件
[模块@][控制器/][操作]常用写法,支持跨模块
完整的模板文件名直接使用完整的模板文件名(包括模板后缀)

自定义模板文件的位置

  1. return $this->fetch('./template/public/menu.html');
  2. 这种方式需要带模板路径和后缀指定一个完整的模板文件位置,要注意模板文件位置是相对于应用的入口文件,而不是模板目录。

渲染内容 直接解析内容而不通过模板文件的话

return $this->display($content,$vars);

5 模板输出替换
内置输出替换变量

D:/eclipse_work1/game.test.com/cppserver/webRoot/../ __STATIC__ __JS__和__CSS__,__URL__

局部替换 支持对视图输出的内容进行字符替换

  1. public function index()
  2. {
  3. $this->assign('name','thinkphp');
  4. return $this->fetch('index',[],['__PUBLIC__'=>'/public/']);
  5. }

全局替换的话,可以直接在配置文件中添加

  1. 'view_replace_str' => [
  2. '__PUBLIC__'=>'/public/',
  3. 'D:/eclipse_work1/game.test.com/cppserver/webRoot/../' => '/',
  4. ]

助手函数view也支持全局配置参数view_replace_str的设置

  1. return view('index',['name'=>'thinkphp'],['__PUBLIC__'=>'/public/']);

二 模板

模板文件定义

视图目录/控制器名(小写)/操作名(小写)+模板后缀

模板渲染规则

模板渲染使用\think\View类的fetch方法渲染规则为

  1. return $view->fetch(); [模板文件目录]/当前控制器名(小写+下划线)/当前操作名(小写).html
  2. return $view->fetch('add'); [模板文件目录]/当前控制器名(小写+下划线)/add.html
  3. return $view->fetch('user/add'); [模板文件目录]/user/add.html
  4. return $view->fetch('admin@user/add'); 跨模块调用模板

3 变量输出

  1. $view = new View();
  2. $view->name = 'thinkphp';
  3. return $view->fetch();

然后就可以在模板中使用

然后就可以在模板中使用

如果是数组变量

  1. $data['name'] = 'ThinkPHP';
  2. $data['email'] = 'thinkphp@qq.com';
  3. $view->assign('data',$data);

在模板中我们可以用下面的方式输出

  1. Name:{$data.name}
  2. 或者
  3. Email:{$data['email']}

如果是一个对象

如果是一个对象

4 系统变量输出

支持输出 $_SERVER$_ENV$_POST$_GET$_REQUEST$_SESSION$_COOKIE变量

  1. {$Think.server.script_name} // 输出$_SERVER['SCRIPT_NAME']变量
  2. {$Think.session.user_id} // 输出$_SESSION['user_id']变量
  3. {$Think.get.pageNumber} // 输出$_GET['pageNumber']变量
  4. {$Think.cookie.name} // 输出$_COOKIE['name']变量

常量输出

  1. {$Think.const.APP_PATH}
  2. {$Think.APP_PATH}

配置输出

{$Think.config.default_module}

语言变量

{$Think.lang.page_error}

5 请求参数

  1. {$Request.get.id} // 调用Request对象的get方法
  2. {$Request.param.name} // 调用Request对象的param方法
  3. {$Request.param.user.nickname} // 调用Request对象的param方法
  4. {$Request.root} // 调用Request对象的root方法
  5. {$Request.root.true} // 调用Request对象的root方法,并且传入参数true
  6. {$Request.path} // 调用Request对象的path方法
  7. {$Request.module} // 调用Request对象的module方法
  8. {$Request.controller} // 调用Request对象的controller方法
  9. {$Request.action} // 调用Request对象的action方法
  10. {$Request.ext} // 调用Request对象的ext方法
  11. {$Request.host} // 调用Request对象的host方法
  12. {$Request.ip} // 调用Request对象的ip方法
  13. {$Request.header.accept-encoding} // 调用Request对象的header方法

6 使用函数

  1. {$data.name|md5}
  2. {$create_time|date="y-m-d",###}
  3. {$data.name|substr=0,3}
  4. {$name|md5|strtoupper|substr=0,3}

7 使用默认值

  1. {$user.nickname|default="这家伙很懒,什么也没留下"}
  2. {$Think.get.name|getName|default="名称为空"} 默认值和函数可以同时使用

8 使用运算符

我们可以对模板输出使用运算符,包括对“+”“-” “*” “/”和“%”的支持

9 三元运算符

{$status? '正常' : '错误'}

10 原样输出

可以使用literal标签来防止模板标签被解析

{literal}Hello,{$name}!{/literal} //{$name}标签被literal标签包含,因此并不会被模板引擎解析,而是保持原样输出。

11 模板注释

  1. {/* 注释内容 */ } 或 {// 注释内容 } 单行注释
  2. {/* 这是模板 模板注释在生成编译缓存文件后会自动删除,这一点和Html的注释不同。
  3. 注释内容*/ } 多行注释

12  包含文件

模版表达式的定义规则为:模块@控制器/操作

  1. {include file="public/header" /} // 包含头部模版
  2. {include file="public/menu" /} // 包含菜单模版header
  3. {include file="blue/public/menu" /} // 包含blue主题下面的menu模版
  4. {include file="public/header,public/menu" /} // 可以一次包含多个模版
  5. {include file="../application/view/default/public/header.html" /} 直接包含一个模版文件名
  6. {include file="Public/header" title="$title" keywords="开源WEB开发框架" /} 在包含的header.html文件里面使用title和keywords变量

13 内置标签

volist标签

  1. {volist name="list" id="vo"}
  2. {$vo.name}
  3. {/volist}

foreach标签

  1. {foreach $list as $vo}
  2. {$vo.name}
  3. {/foreach}

for标签

{for start="开始值" end="结束值" comparison="" step="步进值" name="循环变量名" }{/for}

比较标签

 

  1. {eq name="name" value="value"}value{/eq}
  2. {eq name="name" value="value"}相等{else/}不相等{/eq}

switch标签

  1. {switch name="变量" }
  2. {case value="值1" break="0或1"}输出内容1{/case}
  3. {case value="值2"}输出内容2{/case}
  4. {default /}默认情况
  5. {/switch}

if标签

  1. {if condition="($name == 1) OR ($name > 100) "} value1
  2. {elseif condition="$name eq 2"/}value2
  3. {else /} value3
  4. {/if}

in和notin

{in name="id" value="1,2,3"}id在范围内{/in}

between 和notbetween

{between name="id" value="1,10"}输出内容1{/between}

资源文件加载

  1. {load href="/static/js/common.js" /}
  2. {load href="/static/js/common.js,/static/css/style.css" /}
  3. {js href="/static/js/common.js" /}
  4. {css href="/static/css/style.css" /}

使用php标签

{php}echo 'Hello,world!';{/php}

assign标签

{assign name="var" value="123" /}

define标签

{define name="MY_DEFINE_NAME" value="3" /} 用于在模板中定义常量

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/351347
推荐阅读
相关标签
  

闽ICP备14008679号