- yii\base\Controller::render(): 渲染一個 視圖名 并使用一個 布局 返回到渲染結果。
- yii\base\Controller::renderPartial(): 渲染一個 視圖名 并且不使用布局。
- yii\web\Controller::renderAjax(): 渲染一個 視圖名 并且不使用布局, 并注入所有注冊的JS/CSS腳本和文件,通常使用在響應AJAX網頁請求的情況下。
- yii\base\Controller::renderFile(): 渲染一個視圖文件目錄或 別名下的視圖文件。
- yii\base\Controller::renderContent(): renders a static string by embedding it into the currently applicable layout. This method is available since version 2.0.1.
例如:namespace app\controllers; use Yii; use app\models\Post; use yii\web\Controller; use yii\web\NotFoundHttpException; class PostController extends Controller { public function actionView($id) { $model = Post::findOne($id); if ($model === null) { throw new NotFoundHttpException; } // 渲染一個名稱為"view"的視圖并使用布局 return $this->render('view', [ 'model' => $model, ]); } }
嵌套布局
有時候你想嵌套一個布局到另一個,例如,在Web站點不同地方,想使用不同的布局, 同時這些布局共享相同的生成全局HTML5頁面結構的基本布局,可以在子布局中調用 yii\base\View::beginContent() 和yii\base\View::endContent() 方法,如下所示:
<?php $this->beginContent('@app/views/layouts/base.php'); ?>...child layout content here...<?php $this->endContent(); ?>
調用 yii\base\View::beginBlock() 和 yii\base\View::endBlock() 來定義數據塊, 使用 $view->blocks[$blockID]
訪問該數據塊, 其中 $blockID
為定義數據塊時指定的唯一標識ID。
如下實例顯示如何在內容視圖中使用數據塊讓布局使用。
首先,在內容視圖中定一個或多個數據塊:
...<?php $this->beginBlock('block1'); ?>...content of block1...<?php $this->endBlock(); ?> ... <?php $this->beginBlock('block3'); ?> ...content of block3... <?php $this->endBlock(); ?>
???? 最佳實踐
視圖負責將模型的數據展示用戶想要的格式,總之,視圖
- 應主要包含展示代碼,如HTML, 和簡單的PHP代碼來控制、格式化和渲染數據;
- 不應包含執行數據查詢代碼,這種代碼放在模型中;
- 應避免直接訪問請求數據,如
$_GET
,$_POST
,這種應在控制器中執行, 如果需要請求數據,應由控制器推送到視圖。 - 可讀取模型屬性,但不應修改它們。
為使模型更易于維護,避免創建太復雜或包含太多冗余代碼的視圖, 可遵循以下方法達到這個目標:
- 使用 布局 來展示公共代碼(如,頁面頭部、尾部);
- 將復雜的視圖分成幾個小視圖, 可使用上面描述的渲染方法將這些小視圖渲染并組裝成大視圖;
- 創建并使用 小部件 作為視圖的數據塊;
- 創建并使用助手類在視圖中轉換和格式化數據。