YII2 随笔 视图最佳实践
- yii\base\Controller::render(): 渲染一個(gè) 視圖名 并使用一個(gè) 布局 返回到渲染結(jié)果。
- yii\base\Controller::renderPartial(): 渲染一個(gè) 視圖名 并且不使用布局。
- yii\web\Controller::renderAjax(): 渲染一個(gè) 視圖名 并且不使用布局, 并注入所有注冊(cè)的JS/CSS腳本和文件,通常使用在響應(yīng)AJAX網(wǎng)頁(yè)請(qǐng)求的情況下。
- yii\base\Controller::renderFile(): 渲染一個(gè)視圖文件目錄或 別名下的視圖文件。
- 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; } // 渲染一個(gè)名稱為"view"的視圖并使用布局 return $this->render('view', [ 'model' => $model, ]); } }
嵌套布局
有時(shí)候你想嵌套一個(gè)布局到另一個(gè),例如,在Web站點(diǎn)不同地方,想使用不同的布局, 同時(shí)這些布局共享相同的生成全局HTML5頁(yè)面結(jié)構(gòu)的基本布局,可以在子布局中調(diào)用 yii\base\View::beginContent() 和yii\base\View::endContent() 方法,如下所示:
調(diào)用 yii\base\View::beginBlock() 和 yii\base\View::endBlock() 來(lái)定義數(shù)據(jù)塊, 使用 $view->blocks[$blockID] 訪問(wèn)該數(shù)據(jù)塊, 其中 $blockID 為定義數(shù)據(jù)塊時(shí)指定的唯一標(biāo)識(shí)ID。
如下實(shí)例顯示如何在內(nèi)容視圖中使用數(shù)據(jù)塊讓布局使用。
首先,在內(nèi)容視圖中定一個(gè)或多個(gè)數(shù)據(jù)塊:
...???? 最佳實(shí)踐
視圖負(fù)責(zé)將模型的數(shù)據(jù)展示用戶想要的格式,總之,視圖
- 應(yīng)主要包含展示代碼,如HTML, 和簡(jiǎn)單的PHP代碼來(lái)控制、格式化和渲染數(shù)據(jù);
- 不應(yīng)包含執(zhí)行數(shù)據(jù)查詢代碼,這種代碼放在模型中;
- 應(yīng)避免直接訪問(wèn)請(qǐng)求數(shù)據(jù),如 $_GET, $_POST,這種應(yīng)在控制器中執(zhí)行, 如果需要請(qǐng)求數(shù)據(jù),應(yīng)由控制器推送到視圖。
- 可讀取模型屬性,但不應(yīng)修改它們。
為使模型更易于維護(hù),避免創(chuàng)建太復(fù)雜或包含太多冗余代碼的視圖, 可遵循以下方法達(dá)到這個(gè)目標(biāo):
- 使用 布局 來(lái)展示公共代碼(如,頁(yè)面頭部、尾部);
- 將復(fù)雜的視圖分成幾個(gè)小視圖, 可使用上面描述的渲染方法將這些小視圖渲染并組裝成大視圖;
- 創(chuàng)建并使用 小部件 作為視圖的數(shù)據(jù)塊;
- 創(chuàng)建并使用助手類在視圖中轉(zhuǎn)換和格式化數(shù)據(jù)。
轉(zhuǎn)載于:https://www.cnblogs.com/chuanqideya/p/6119188.html
總結(jié)
以上是生活随笔為你收集整理的YII2 随笔 视图最佳实践的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Android ContentProvi
- 下一篇: 视频教程-使用 Pandas 与 Mat