2019.01.11yii-》应用结构-》视图view

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网页请求的情况下。
    • 别名下的视图文件。

    • 例如,视图中的如下代码会渲染该视图所在目录下的 _overview.php 视图文件, 记住视图中 $this 对应 view 组件:

      <?= $this->render('_overview') ?>

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底部)

修改如下代码。

   

猜你喜欢

转载自blog.csdn.net/tangerine_/article/details/86303432
今日推荐