1.1创建视图
视图为包含HTML和PHP代码的PHP脚本,
可看到PHP代码用来生成动态内容如页面标题和表单,
HTML代码把它组织成一个漂亮的HTML页面。
1.2.安全
当创建生成HTML页面的视图时,
在显示之前将用户输入数据进行转码和过滤非常重要,
否则,你的应用可能会被 跨站脚本 攻击。
1.3组织视图
控制器渲染的视图文件默认放在@app/views/post-comment
控制器类 PostCommentController
对应的目录为 @app/views/post-comment
,
如果是模块中的控制器,目录应为 module directory 模块目录下的 views/ControllerID
目录;
- 对于 小部件 渲染的视图文件默认放在
WidgetPath/views
目录, 其中WidgetPath
代表小部件类文件所在的目录; - 对于其他对象渲染的视图文件,建议遵循和小部件相似的规则。
- 可覆盖控制器或小部件的 yii\base\ViewContextInterface::getViewPath() 方法来自定义视图文件默认目录。
2渲染视图(显示html)
可在 控制器, 小部件, 或其他地方调用渲染视图方法来渲染视图,
/** * @param string $view 视图名或文件路径,由实际的渲染方法决定 * @param array $params 传递给视图的数据 * @return string 渲染结果 */ methodName($view, $params = [])
2.1控制器中渲染
在 控制器 中,可调用以下控制器方法来渲染视图:
- render(): 渲染一个 视图名 并使用一个 布局 返回到渲染结果。
- renderPartial(): 渲染一个 视图名 并且不使用布局。
- renderAjax(): 渲染一个 视图名 并且不使用布局, 并注入所有注册的JS/CSS脚本和文件,通常使用在响应AJAX网页请求的情况下。
-
别名下的视图文件。
- renderContent(): renders a static string by embedding it into the currently applicable layout. This method is available since version 2.0.1.
2.1小部件中渲染
在 小部件 中,可调用以下小部件方法来渲染视图:
2.2视图中渲染 ¶
可以在视图中渲染另一个视图,可以调用view component视图组件提供的以下方法:
- render(): 渲染一个 视图名.
- renderAjax(): 渲染一个 视图名 并注入所有注册的JS/CSS脚本和文件,通常使用在响应AJAX网页请求的情况下。
2.3其他地方渲染
在任何地方都可以通过表达式 Yii::$app->view
访问 view 应用组件, 调用它的如前所述的方法渲染视图,例如:
// 显示视图文件 "@app/views/site/license.php"
echo \Yii::$app->view->renderFile('@app/views/site/license.php');
eg:(frontend/web/index.php中写以下内容)
echo \Yii::$app->view->renderFile('@app/views/site/contact.php');
(frontend/views/contact.php)
use \frontend\models\ContactForm; $model = new ContactForm();
(url测试:http://y2aa-frontend.test/index.php?r=site%2Findex)
2.4视图名
渲染视图时,可指定一个视图名或视图文件路径/别名,
大多数情况下使用前者因为前者简洁灵活,
我们称用名字的视图为 视图名.、
根据以上规则,
在控制器中 app\controllers\PostController
调用 $this->render('view')
,
实际上渲染 @app/views/post/view.php
视图文件,当
在该视图文件中调用 $this->render('_overview')
会渲染 @app/views/post/_overview.php
视图文件。
2.5视图中访问数据
在视图中有两种方式访问数据:推送和拉取。
推送方式:(在sitecontroller.php中写的)
echo $this->render('report', [ 'foo' => 1, 'bar' => 2, ]);
拉取方式:(直接放在frontend/view/index.php文件头部即可,
打开浏览器测试http://y2aa-frontend.test/index.php?r=site%2Findex)
<div>The controller ID is: <?= $this->context->id ?></div>
(测试结果)
2.6视图间共享数据
view component视图组件提供params 参数属性来让不同视图共享数据。
方法1:$this->params['breadcrumbs'][] = 'About Us';
方法2:
<?= yii\widgets\Breadcrumbs::widget([ 'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [], ]) ?>
(最后结果相同)(测试url:http://y2aa-frontend.test/index.php?r=site%2Fabout)
3布局(同视图差不多)
布局是一种特殊的视图,代表多个视图的公共部分,(比如头部,尾部)
3.1布局中访问数据
在布局中可访问两个预定义变量:$this
和 $content
,
3.2页面显示内容修改为中文
(frontend/views/layouts/main.php中找到以下代码)
<html lang="<?= Yii::$app->language ?>">
(ctrl+单击language即可跳转到yii底部)
修改如下代码。