yii2檢視

胡勇健發表於2024-03-30

yii2檢視

示例程式碼

yii2檢視
<?php
use yii\helpers\Html;
use yii\widgets\ActiveForm;

/* @var $this yii\web\View */
/* @var $form yii\widgets\ActiveForm */
/* @var $model app\models\LoginForm */

$this->title = 'Login';
?>
<h1><?= Html::encode($this->title) ?></h1>

<p>Please fill out the following fields to login:</p>

<?php $form = ActiveForm::begin(); ?>
    <?= $form->field($model, 'username') ?>
    <?= $form->field($model, 'password')->passwordInput() ?>
    <?= Html::submitButton('Login') ?>
<?php ActiveForm::end(); ?>

控制器中渲染

yii2檢視
yii\base\Controller::render(): 渲染一個 檢視名 並使用一個 佈局 返回到渲染結果。
yii\base\Controller::renderPartial(): 渲染一個 檢視名 並且不使用佈局。
yii\web\Controller::renderAjax(): 渲染一個 檢視名 並且不使用佈局, 並注入所有註冊的JS/CSS指令碼和檔案,通常使用在響應AJAX網頁請求的情況下。
yii\base\Controller::renderFile(): 渲染一個檢視檔案目錄或別名下的檢視檔案。

小部件中渲染

yii2檢視
yii\base\Widget::render(): 渲染一個 檢視名.
yii\base\Widget::renderFile(): 渲染一個檢視檔案目錄或別名下的檢視檔案。

其他地方渲染

yii2檢視
// 顯示檢視檔案 "@app/views/site/license.php"
echo \Yii::$app->view->renderFile('@app/views/site/license.php');

檢視中訪問資料

yii2檢視
echo $this->render('report', [
    'foo' => 1,
    'bar' => 2,
]);
yii2檢視
<?= $this->context->id ?>

佈局

yii2檢視
<?php
use yii\helpers\Html;

/* @var $this yii\web\View */
/* @var $content string 字串 */
?>
<?php $this->beginPage() ?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8"/>
    <?= Html::csrfMetaTags() ?>
    <title><?= Html::encode($this->title) ?></title>
    <?php $this->head() ?>
</head>
<body>
<?php $this->beginBody() ?>
    <header>My Company</header>
    <?= $content ?>
    <footer>© 2014 by My Company</footer>
<?php $this->endBody() ?>
</body>
</html>
<?php $this->endPage() ?>
yii2檢視
yii\base\View::beginPage(): 該方法應在佈局的開始處呼叫, 它觸發表明頁面開始的 yii\base\View::EVENT_BEGIN_PAGE 事件。
yii\base\View::endPage(): 該方法應在佈局的結尾處呼叫, 它觸發表明頁面結尾的 yii\base\View::EVENT_END_PAGE 時間。
yii\web\View::head(): 該方法應在HTML頁面的<head>標籤中呼叫, 它生成一個佔位符,在頁面渲染結束時會被註冊的頭部HTML程式碼(如,link標籤, meta標籤)替換。
yii\web\View::beginBody(): 該方法應在<body>標籤的開始處呼叫, 它觸發 yii\web\View::EVENT_BEGIN_BODY 事件並生成一個佔位符, 會被註冊的HTML程式碼(如JavaScript)在頁面主體開始處替換。
yii\web\View::endBody(): 該方法應在<body>標籤的結尾處呼叫, 它觸發 yii\web\View::EVENT_END_BODY 事件並生成一個佔位符, 會被註冊的HTML程式碼(如JavaScript)在頁面主體結尾處替換。

控制器中修改佈局檔案

yii2檢視
namespace app\controllers;

use yii\web\Controller;

class PostController extends Controller
{
    public $layout = 'post';
    
    // ...
}

使用檢視元件

yii2檢視
[
    // ...
    'components' => [
        'view' => [
            'class' => 'app\components\View',
        ],
        // ...
    ],
]

註冊Meta元標籤

yii2檢視
<?php
$this->registerMetaTag(['name' => 'keywords', 'content' => 'yii, framework, php']);
?>
yii2檢視
$this->registerMetaTag(['name' => 'description', 'content' => 'This is my cool website made with Yii!'], 'description');
$this->registerMetaTag(['name' => 'description', 'content' => 'This website is about funny raccoons.'], 'description');

檢視事件

yii2檢視
yii\base\View::EVENT_BEFORE_RENDER: 在控制器渲染檔案開始時觸發, 該事件可設定 yii\base\ViewEvent::isValid 為 false 取消檢視渲染。
yii\base\View::EVENT_AFTER_RENDER: 在佈局中呼叫 yii\base\View::beginPage() 時觸發, 該事件可獲取yii\base\ViewEvent::output的渲染結果,可修改該屬性來修改渲染結果。
yii\base\View::EVENT_BEGIN_PAGE: 在佈局呼叫 yii\base\View::beginPage() 時觸發;
yii\base\View::EVENT_END_PAGE: 在佈局呼叫 yii\base\View::endPage() 是觸發;
yii\web\View::EVENT_BEGIN_BODY: 在佈局呼叫 yii\web\View::beginBody() 時觸發;
yii\web\View::EVENT_END_BODY: 在佈局呼叫 yii\web\View::endBody() 時觸發。

相關文章