# Yii2视图
[TOC]
## 视图分配`render()`和`renderPartial()`
`render()`和`renderPartial()`之间最大的区别就是:一个是渲染父模板,一个不渲染父模板。
其中`render()`输出父模板的内容,将渲染的内容嵌入父模板;`renderPartial()`则不输出父模板的内容。只对本次渲染的局部内容进行输出。
```php
public function actionIndex()
{
return $this->renderPartial('index',$data);
return $this->render('index',$data);
}
```
Yii2默认自带的父模板文件是`<project>/views/layouts/main.php`,我们可以在当前控制器中新增`public $layouts = 'home';`属性将其修改为我们指定的父模板文件是`<project>/views/layouts/home.php`,如:
```php
<?php
namespace app\controllers;
use yii\web\Controller;
class HomeController extends Controller
{
public $layout = 'home';
public function actionIndex()
{
$str = 'Hello World!';
return $this->render('index',compact('str'));
}
}
```
## 渲染视图
### 使用rander()等渲染view文件的几种方式
在`yii\base\View中findViewFile()`定义匹配规则
1. `别名`开头,路径指定view文件:`@app/views/site/about(.php)`
2. `//`开头,使用**app**目录下的view:`//site/index`
3. `/`开头,使用当前Module中的views:`/site/index`
4. 直接使用字符串(重要): 'index'
### 在控制器中渲染视图
如`$this->render('about')`
`Controller::render`会调用`View::render`方法
### 在view中渲染视图
使用的视图是当前view所在的目录,如在index.php中
```php
$this->render('error',['name'=>'name','message'=>'message'])?>
```
`error.php`文件是`about.php`所在目录下面的`error.php`
### render、renderPartial、renderContent、renderAjax、renderFile
1. `render`显示view和layout
2. `renderPartial`只显示view
3. `renderContent`只渲染layout
4. `renderFile`显示指定的文件,是最基础的方法,其中`renderAjax`,`renderPartial`最终都是调用`renderFile`
5. `renderAjax`只显示view,以ajax方式渲染页面,可以配合js/css实现各种特效
## 视图文件的相互调用
有时我们需要引入其他模板的视图布局,那么我们可以在模板文件中使用`render()`方法进行引用,如果要引入的视图文件与当前视图文件在一个文件夹下我们直接可以传入视图名称,如果不是可以传入`/控制器名/视图名`,如下:
```html
<?= $this->render('about'); ?>
<?= $this->render('/site/about'); ?>
```
## 视图防止XSS攻击
```html
<?php
use yii\helpers\Html;
use yii\helpers\HtmlPurifier;
?>
<p><?= $str; // 输出hello world! 弹出alert ?></p>
<p><?= Html::encode($str); // 输出hello world!<script>alert()</script> ?></p>
<p><?= HtmlPurifier::process($str); // 输出hello world! ?></p>
```
- 开始
- Yii2开发小技巧
- Yii2使用不同的方式进行邮件发送逻辑处理
- Yii2 Serialization of 'Closure' is not allowed 错误
- Yii创建应用
- Yii应用结构和流程
- Yii的路径别名
- Yii的请求
- Yii的响应
- Sessions 和 Cookies
- Yii自定义全局工具函数
- Yii2模型
- Yii2视图
- Yii2控制器
- 大数据节省内存处理
- 关联查询hasMany、hasOne
- Yii2 URL地址美化
- Yii2整合AdminLTE后台主题
- Yii2模型中的场景
- Yii2中的RBAC
- Yii2项目后台整合yii2-admin模块
- RBAC集成AdminLTE后台主题对菜单进行控制
- Yii2自定义Gii模板
- 修复AdminLTE引用外部字体文件导致访问变慢的情况
- Yii2事件简单使用
- Yii2模型事件
- Yii2使用GridView新增操作按钮
- Yii2向loyout模板文件中传值
- Yii2数据缓存
- Yii2缓存
- Yii2数据缓存之增删改查
- Yii2拓展
- Yii2日期时间插件-datetimepicker
- kartik-v/yii2-widget-fileinput上传插件