Yii - 视图

  • 简述

    视图负责将数据呈现给最终用户。在 Web 应用程序中,视图只是包含 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>
    
    $this变量引用了管理和呈现这个视图模板的视图组件。
    这就是“关于”页面的样子 -
    关于页面
    为了避免 XSS 攻击,对来自最终用户的数据进行编码和/或过滤非常重要。您应该始终通过调用yii\helpers\Html::encode()来编码纯文本,并通过调用yii\helpers\HtmlPurifier来编码HTML 内容。
    第 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 ::process()调用也是如此。仅显示 h1 标签。
    视图遵循这些约定 -
    • 由控制器呈现的视图应该放在@app/views/controllerID文件夹中。
    • 在小部件中呈现的视图应该放在widgetPath/views 文件夹中。
    要在控制器中渲染视图,您可以使用以下方法 -
    • render() - 渲染视图并应用布局。
    • renderPartial() - 渲染没有布局的视图。
    • renderAjax() - 渲染一个没有布局的视图,但注入所有注册的 js 和 css 文件。
    • renderFile() - 在给定的文件路径或别名中渲染视图。
    • renderContent() - 呈现静态字符串并应用布局。
    要在另一个视图中渲染视图,您可以使用以下方法 -
    • render() - 渲染视图。
    • renderAjax() - 渲染一个没有布局的视图,但注入所有注册的 js 和 css 文件。
    • renderFile() - 在给定的文件路径或别名中渲染视图。
    第 4 步- 在 vi​​ews/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 文件。
    • 如果视图名称以“/”开头,那么如果当前活动模块是论坛,并且视图名称是评论/帖子,则路径将是@app/modules/forum/views/comment/post。如果没有活动模块,则路径为@app/views/comment/post。
    • 如果视图名称以“//”开头,则对应的路径为@app/views/ViewName。例如,//site/contact 对应于@app/views/site/contact.php。
    • 如果视图名称是contact,上下文控制器是SiteController,那么路径就是@app/views/site/contact.php。
    • 如果价格视图在商品视图中呈现,那么价格将被解析为@app/views/invoice/price.php(如果它正在呈现在@app/views/invoice/goods.php 中)。
  • 访问视图中的数据

    要访问视图中的数据,您应该将数据作为第二个参数传递给视图呈现方法。
    第 1 步- 修改SiteControlleractionAbout
    
    public function actionAbout() {
       $email = "admin@support.com";
       $phone = "+78007898100";
       return $this->render('about',[
          'email' => $email,
          'phone' => $phone
       ]);
    }
    
    在上面给出的代码中,我们传递了两个变量$email$phoneAbout视图中呈现。
    第 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,您将看到以下内容。
    更改关于查看代码