2015-05-11 12:01:27 19645次浏览 4条回答 2 悬赏 50 金钱
<?php
use yii\helpers\Html;
use yii\bootstrap\Nav;
use yii\bootstrap\NavBar;
use yii\widgets\Breadcrumbs;
use app\assets\AppAsset;

/* @var $this \yii\web\View */
/* @var $content string */

AppAsset::register($this);
?>
<head>
    <meta charset="<?= Yii::$app->charset ?>">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <?= Html::csrfMetaTags() ?>
    <title><?= Html::encode($this->title) ?></title>
    <?php $this->head() ?>
</head>

他是如何引入资源文件的?
用的yii2basic的layout/main.php

最佳答案

  • 发布于 2015-05-12 11:35 举报

    一切尽在Controller的render方法中,只有在控制器中render才会加载layout,在View的render方法中是不会自动加载layout

    // Controller::render()
     public function render($view, $params = [])
     {
        // 读取views文件夹中的视图文件
        $content = $this->getView()->render($view, $params, $this);
        // 把获取到的视图内容,用laytou包含起来,其中layout中会有这么一句echo $this->content 就是输出视图文件的内容
        return $this->renderContent($content);
     }
    

    layout怎么引用进来我们已经知道了,那么在视图文件中怎么把资源注入到layout的头部或者底部呢?

    View::registerJs();
    View::registerJsFile();
    View::registerCss();
    View::registerCssFile();
    

    每个Asset中都会用到以上这些资源注入方法,而在Layout中会有View::head()、View::beginBody()、View::endBody() 这些标记,在页面的输出<![CDATA[YII-BLOCK-HEAD]]>就这一串这样子的字符。在View::endPage()的时候就会把注入的资源全部替换到页面上的每一个标记中。至于要指定注入到某一个标记中,需要指定上面的注入资源函数的第二个参数。

    1 条回复
    回复于 2015-05-12 12:04 回复

    需要好好跟踪里面的函数,仔细琢磨下

    , , 觉得很赞
  • 回答于 2015-05-11 13:06 举报

    AppAsset::register($this);

    1 条回复
    回复于 2015-05-11 13:33 回复

    要原理,怎么载入进来的

  • 回答于 2015-05-11 16:44 举报

    可以追踪下源码。大体是通过layout里的$this->head() $this->endBody() 这些方法添加进去的

    2 条回复
    回复于 2015-05-12 08:49 回复

    这样的答案可没有50分啊

    回复于 2015-05-12 09:34 回复

    分? 我还真没看过哪个问题多少分再决定是否回答....

  • 回答于 2015-05-13 22:33 举报

    刚刚研究出来,是如何引入资源文件,不过已经有高手解答了,哈哈

    1 条回复
    回复于 2015-05-15 17:09 回复

    代码看了又看,还是不怎么会啊

您需要登录后才可以回答。登录 | 立即注册
wodrow
副董事长

wodrow China

注册时间:2015-04-09
最后登录:3小时前
在线时长:192小时53分
  • 粉丝34
  • 金钱38735
  • 威望120
  • 积分41855

热门问题