# 4.4 视图
视图是MVC模式中的一部分,它代表数据到终端用户展示逻辑,视图文件为PHP脚本,主要包含HTML代码和展示类PHP代码。MSF框架整合了第三方的模板引擎[plates](https://github.com/pinguo/plates),并修改了部分源码。
## 使用视图
```php
<?php
/**
* 示例控制器
*
* @author camera360_server@camera360.com
* @copyright Chengdu pinguo Technology Co.,Ltd.
*/
namespace App\Controllers;
use PG\MSF\Controllers\Controller;
use App\Models\Demo as DemoModel;
class Demo extends Controller
{
// 略...
public function actionTplView()
{
$data = [
'title' => 'MSF Demo View',
'friends' => [
[
'name' => 'Rango',
],
[
'name' => '鸟哥',
],
[
'name' => '小马哥',
],
]
];
$this->outputView($data);
}
}
```
示例代码:
[./php-msf-demo/app/Controllers/Demo.php](https://github.com/pinguo/php-msf-demo/blob/master/app/Controllers/Demo.php)
- Controller::outputView($data, $view = null)
加载视图文件,并渲染$data数据
`$data`传递到视图文件的数据,为一个关联数组
`$view`视图文件名称,是相对`app/Views`或者`php-msf/src/Views`的文件名,注意不需要写`.php`的后缀
加载的视图文件为[./app/Views/Demo/TplView.php](https://github.com/pinguo/php-msf-demo/blob/master/app/Views/Demo/TplView.php),即:
```php
<h1><?=$this->e($title)?></h1>
<h2>Friends</h2>
<ul>
<?php foreach($friends as $friend): ?>
<li>
<?=$this->e($friend['name'])?>
</li>
<?php endforeach ?>
</ul>
```
## 视图加载策略
### 策略1
默认情况下框架会根据请求的控制器名和方法名自动加载视图文件,比如:
[http://127.0.0.1:8000/Demo/TplView](http://127.0.0.1:8000/Demo/TplView)
这样的URL会自动首先加载的视图文件为`app/Views/Demo/TplView.php`,如果失败,会继续加载`php-msf/src/Views/Demo/TplView.php`,如果还是失败,则会抛出异常。
### 策略2
如果传递了outputView()方法的第二个参数,则会根据$view来加载视图文件,策略同1,先加载app下面的视图,如果未找到则加载框架内置的视图文件
## 模板语法
更多的模板方法,请参考[plates docs](https://github.com/pinguo/plates/tree/master/docs)
- 0 文档说明
- 1 为什么研发新框架
- 1.1 传统php-fpm工作模式的问题
- 1.2 压测数据对比
- 1.3 小结
- 2 微服务框架研发概览
- 2.1 通信框架技术选型
- 2.2 swoole
- 2.3 协程原理
- 2.4 异步、并发
- 2.5 小结
- 3 框架运行环境
- 3.1 环境变量
- 3.2 运行代码
- 3.3 docker
- 3.4 小结
- 4 框架结构
- 4.1 结构概述
- 4.2 控制器
- 4.3 模型
- 4.4 视图
- 4.5 同步任务
- 4.6 配置
- 4.7 路由
- 4.8 小结
- 5 框架组件
- 5.1 协程
- 5.2 类的加载
- 5.3 异步Http Client
- 5.4 请求上下文
- 5.5 连接池
- 5.6 对象池
- 5.7 RPC
- 5.8 公共库
- 5.9 RESTful
- 5.10 多语言
- 5.11 杂项
- 5.12 小结
- 6 常见问题
- 7 附录