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 ,您将看到以下内容。

更改关于查看代码