Yii-views

提供:Dev Guides
移動先:案内検索

Yii-ビュー

ビューは、エンドユーザーにデータを表示する役割を果たします。 Webアプリケーションでは、 Views はHTMLおよびPHPコードを含む単なるPHPスクリプトファイルです。

ビューを作成する

ステップ1 *-基本的なアプリケーションテンプレートの「About」*ビューを見てみましょう。

<?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* 変数は、このビューテンプレートを管理およびレンダリングするビューコンポーネントを参照します。

これは、*「About」*ページがどのように見えるかです-

ページについて

XSS攻撃を回避するために、エンドユーザーからのデータをエンコードおよび/またはフィルタリングすることが重要です。 * yii \ helpers \ Html
encode()を呼び出してプレーンテキストをエンコードし、 *yii \ helpers \ HtmlPurifier を呼び出してHTMLコンテンツを常にエンコードする必要があります。

ステップ2 *-「About」*ビューを次のように変更します。

<?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 *-views/siteフォルダー内に、 *_ part1.phpと_part2.php の2つのビューファイルを作成します。

*_part1.php* -
<h1>PART 1</h1>
*_part2.php* -
<h1>PART 2</h1>

ステップ5 *-最後に、これら2つの新しく作成されたビューを「About」*ビュー内にレンダリングします。

<?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/goods.phpでレンダリングされる場合、価格は@ app/views/invoice/price.phpとして解決されます。

ビューでデータにアクセスする

ビュー内のデータにアクセスするには、データを2番目のパラメーターとしてビューのレンダリングメソッドに渡す必要があります。

ステップ1 *- *SiteControlleractionAbout を変更します。

public function actionAbout() {
   $email = "[email protected]";
   $phone = "+78007898100";
   return $this->render('about',[
      'email' => $email,
      'phone' => $phone
   ]);
}

上記のコードでは、2つの変数 $ email$ phone を渡して、 About ビューでレンダリングします。

  • ステップ2 *-aboutビューのコードを変更します。
<?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* から受け取った2つの変数を追加しました。

ステップ3 *-WebブラウザにURL *http://localhost:8080/index.php?r = site/about を入力すると、次のように表示されます。

ビューコードについての変更