# 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 附錄