PHP的Yii框架中View视图的使用进阶(4)

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,这种应在控制器中执行, 如果需要请求数据,应由控制器推送到视图。

可读取模型属性,但不应修改它们。

为使模型更易于维护,避免创建太复杂或包含太多冗余代码的视图,可遵循以下方法达到这个目标:

使用 布局 来展示公共代码(如,页面头部、尾部);

将复杂的视图分成几个小视图,可使用上面描述的渲染方法将这些小视图渲染并组装成大视图;

创建并使用 小部件 作为视图的数据块;

创建并使用助手类在视图中转换和格式化数据。

您可能感兴趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/1857cac01bc532dc2024da54b11056bb.html