Yii 视图
视图负责将数据呈现给最终用户。在Web应用程序中, Views 只是包含HTML和PHP代码的PHP脚本文件。
创建视图
第1步 - 让我们看看 基本应用程序模板的 “关于” 视图。
<?php /* @var $this yii\web\View */ use yii\helpers\Html; $this->title = 'About'; $this->params['breadcrumbs'][] = $this->title; ?> <div class="site-about"> <h1><?= Html::encode($this->title) ?></h1> <p> This is the About page. You may modify the following file to customize its content: </p> <code><?= __FILE__ ?></code> </div>
在 $ 此变量是指管理和呈现此视图模板视图组件。
这就是 '关于' 页面的外观 -
编码和/或过滤来自最终用户的数据以避免XSS攻击非常重要。你应该总是通过调用 yii \ helpers \ Html :: encode() 和HTML内容来调用 yii \ helpers \ HtmlPurifier 来对纯文本 进行编码 。
第2步 - 按以下方式修改 “关于” 视图。
<?php /* @var $this yii\web\View */ use yii\helpers\Html; use yii\helpers\HtmlPurifier; $this->title = 'About'; $this->params['breadcrumbs'][] = $this->title; ?> <div class="site-about"> <h1><?= Html::encode($this->title) ?></h1> <p> This is the About page. You may modify the following file to customize its content: </p> <p> <?= Html::encode("<script>alert('alert!');</script><h1>ENCODE EXAMPLE</h1>>") ?> </p> <p> <?= HtmlPurifier::process("<script>alert('alert!');</script><h1> HtmlPurifier EXAMPLE</h1>") ?> </p> <code><?= __FILE__ ?></code> </div>
第3步 - 现在键入 http:// localhost:8080 / index.php?r = site / about 。您将看到以下屏幕。
注意, Html :: encode() 函数内的JavaScript代码以纯文本显示。同样的事情是 HtmlPurifier ::过程() 调用。仅显示h1标签。
观点遵循这些公约 -
- 由控制器呈现的视图应放置在 @ app / views / controllerID 文件夹中。
- 在小部件中呈现的视图应放入 widgetPath / views文件夹中 。
要 在控制器中 呈现 视图, 可以使用以下方法 -
- render() - 渲染视图并应用布局。
- renderPartial() - 呈现没有布局的视图。
- renderAjax() - 呈现没有布局的视图,但注入所有注册的js和css文件。
- renderFile() - 渲染给定文件路径或别名中的视图。
- renderContent() - 呈现静态字符串并应用布局。
要 在另一个视图中 渲染 视图 ,可以使用以下方法 -
- render() - 渲染一个视图。
- renderAjax() - 呈现没有布局的视图,但注入所有注册的js和css文件。
- renderFile() - 渲染给定文件路径或别名中的视图。
第4步 - 在views / site文件夹中,创建两个视图文件: _part1.php和_part2.php 。
_part1.php -
<h1>PART 1</h1>
_part2.php -
<h1>PART 2</h1>
第5步 - 最后,在 '关于' 视图内渲染这两个新创建 的 视图。
<?php /* @var $this yii\web\View */ use yii\helpers\Html; $this->title = 'About'; $this->params['breadcrumbs'][] = $this->title; ?> <div class="site-about"> <h1><?= Html::encode($this->title) ?></h1> <p> This is the About page. You may modify the following file to customize its content: </p> <?= $this->render("_part1") ?> <?= $this->render("_part2") ?> <code><?= __FILE__ ?></code> </div>
您将看到以下输出 -
渲染视图时,可以使用视图名称或视图文件路径/别名来定义视图。视图名称按以下方式解决 -
- 视图名称可以省略扩展名。例如,about视图对应于about.php文件。
- 如果视图名称以“/”开头,那么如果当前活动的模块是论坛,并且视图名称是comment / post,则路径将是@app / modules / forum / views / comment / post。如果没有活动模块,路径将为@ app / views / comment / post。
- 如果视图名称以“//”开头,则相应的路径将为@ app / views / ViewName。例如,// site / contact对应于@ app / views / site / contact.php。
- 如果视图名称是联系人,并且上下文控制器是SiteController,那么路径将是@ app / views / site / contact.php。
- 如果价格视图在商品视图内呈现,则价格将被解析为@ app / views / invoice / price.php,如果它正在@ app / views / invoice / goods.php中呈现。
访问视图中的数据
要访问视图中的数据,您应该将数据作为第二个参数传递给视图呈现方法。
第1步 - 修改 动作 关于 SiteController 。
public function actionAbout() { $email = "admin@support.com"; $phone = "+78007898100"; return $this->render('about',[ 'email' => $email, 'phone' => $phone ]); }
在上面给出的代码中,我们传递两个变量 $ email 和 $ phone 以在 关于 视图中呈现。
第2步 - 更改关于查看代码。
<?php /* @var $this yii\web\View */ use yii\helpers\Html; $this->title = 'About'; $this->params['breadcrumbs'][] = $this->title; ?> <div class = "site-about"> <h1><?= Html::encode($this->title) ?></h1> <p> This is the About page. You may modify the following file to customize its content: </p> <p> <b>email:</b> <?= $email ?> </p> <p> <b>phone:</b> <?= $phone ?> </p> <code><?= __FILE__ ?></code> </div>
我们刚刚添加了两个从 SiteController 收到的 变量 。
第3步 - 在Web浏览器中输入URL http:// localhost:8080 / index.php?r = site / about ,您将看到以下内容。
下一章:Yii 布局
布局代表多个视图的公共部分,即例如页眉和页脚。默认情况下,布局应该存储在 views / layouts 文件夹中。让我们看看基本应用程序模板的主要布局 -<?php /* @var $this \yii\web\Vie ...