Yii-views
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 *- *SiteController の actionAbout を変更します。
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 を入力すると、次のように表示されます。