版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
安全:当创建生成HTML页面的视图时,在显示之前将用户输入数据进行转码和过滤非常重要, 否则,你的应用可能会被 跨站脚本 攻击。
//转义
<?php
use yii\helpers\Html;
?>
<div class="username">
<?= Html::encode($user->name) ?>
</div>
//过滤
<?php
use yii\helpers\HtmlPurifier;
?>
<div class="post">
<?= HtmlPurifier::process($post->text) ?>
</div>
组织视图 :控制器渲染的视图文件默认放在 @app/views/ControllerID 目录下, 其中 ControllerID 对应 控制器 ID, 例如控制器类为 PostController,视图文件目录应为 @app/views/post, 控制器类 PostCommentController对应的目录为@app/views/post-comment, 对于 小部件 渲染的视图文件默认放在 WidgetPath/views 目录, 其中 WidgetPath 代表小部件类文件所在的目录;
控制器中渲染:要渲染控制器中的视图,可以使用下面的方法
- render() − 渲染一个视图,并应用布局
- renderFile() − 在一个给定的文件路径或别名来渲染视图
- renderAjax() − 渲染视图但不使用布局,但所有的注入JS和CSS文件
- renderPartial() − 渲染视图,但不使用布局
- renderContent() − 渲染一个静态字符串并应用布局
视图赋值
1. 方法一(推荐)
// 控制器中赋值变量
public function actionIndex()
{
$this->getView()->params['title'] = 'here is index';
return $this->render('index');
}
// 视图中显示变量
<?php echo $this->params['title']; ?>
注:params
是 YII 视图类中预定义的一个成员变量,所以可以直接通过 $this->params
引用。
优点:在视图文件中你可能需要处理控制器传递过来的变量,比如:$title = $this->params['title']
,那么通过 $title
和 $this->params['title']
这两个写法你可以很容易区分哪个变量是在视图文件中临时定义的,哪个变量是从控制器中传递过来;同时也防止变量因为名字相同而覆盖。
2. 方法二
// 控制器中赋值变量
public function actionIndex()
{
$params = array('title'=>'here is index');
return $this->render('index', $params);
}
// 视图中显示变量
<?php echo $title; ?>
小部件中渲染 :在 小部件 中,可调用以下小部件方法来渲染视图:render(): 渲染一个 视图名. 别名下的视图文件。
namespace app\components;
use yii\base\Widget;
use yii\helpers\Html;
class ListWidget extends Widget
{
public $items = [];
public function run()
{
// 渲染一个名为 "list" 的视图
return $this->render('list', [
'items' => $this->items,
]);
}
}