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() 时触发。
例如,如下代码将当前日期添加到页面结尾处:
\Yii::$app->view->on(View::EVENT_END_BODY, function () { echo date('Y-m-d'); });
渲染静态页面
静态页面指的是大部分内容为静态的不需要控制器传递动态数据的Web页面。
可将HTML代码放置在视图中,在控制器中使用以下代码输出静态页面:
public function actionAbout() { return $this->render('about'); }
如果Web站点包含很多静态页面,多次重复相似的代码显得很繁琐, 为解决这个问题,可以使用一个在控制器中称为 yii\web\ViewAction 的独立操作。 例如:
namespace app\controllers; use yii\web\Controller; class SiteController extends Controller { public function actions() { return [ 'page' => [ 'class' => 'yii\web\ViewAction', ], ]; } }
现在如果你在@app/views/site/pages目录下创建名为 about 的视图, 可通过如下rul显示该视图:
?r=site/page&view=about
GET 中 view 参数告知 yii\web\ViewAction 操作请求哪个视图,然后操作在 @app/views/site/pages目录下寻找该视图,可配置 yii\web\ViewAction::viewPrefix 修改搜索视图的目录。
最佳实践
视图负责将模型的数据展示用户想要的格式,总之,视图
应主要包含展示代码,如HTML, 和简单的PHP代码来控制、格式化和渲染数据;
不应包含执行数据查询代码,这种代码放在模型中;
应避免直接访问请求数据,如 $_GET, $_POST,这种应在控制器中执行, 如果需要请求数据,应由控制器推送到视图。
可读取模型属性,但不应修改它们。
为使模型更易于维护,避免创建太复杂或包含太多冗余代码的视图,可遵循以下方法达到这个目标:
使用 布局 来展示公共代码(如,页面头部、尾部);
将复杂的视图分成几个小视图,可使用上面描述的渲染方法将这些小视图渲染并组装成大视图;
创建并使用 小部件 作为视图的数据块;
创建并使用助手类在视图中转换和格式化数据。
您可能感兴趣的文章: