1.模板文件中访问view和controller,view : $this,controller :$this->context

模板文件显示流程:

  • 1.控制器会在render中,把控制器本身,模板文件传给view
  • 2.呈现模板文件,首先view会查找主题,主题如果拥有模板文件,则优先使用主题内模板文件.并将模板文件赋值给变量$content
  • 3.呈现布局文件,同样查找主题,并将$content作为变量导入
  • 4.引入模板文件时,是发生在view中,所以$this就是view
  • 5.路径查找是根据controller的id...所以模块中的controllerMap如果要显示view..则要重新设置控制器id.
  • 6.主题的本质就是更改viewpath的路径..
    'components' => [
        'view' => [
            'theme' => [
                'pathMap' => ['@app/views' => '@app/themes/basic'],
                'baseUrl' => '@web/themes/basic',
            ],
        ],
    ],

2.注册资源

registerAssetBundle
常用的方法是在模板文件中,\frontend\assets\AppAsset::register($this);其中$this就是view

  • 1.首先会查找view的$assetBundles中是否存在该bundle,不存在则实例化,并补全其中js和css的basePath
  • 2.查看依赖是否存在于$assetBundles中,并发布..注意: 由于已发布的bundle都会保存于$assetBundles中,所以不会重复发布已存在的bundle
  • 3.根据位置,重新设置bundle和依赖的jsOptions['position']
  • 4.在使用endBody()的时候会注册$bundle中的css和js.
registerJsFile
根据位置将js文件保存到view的jsFiles中 $this->jsFiles[$position][$key] key如果是null则为该js脚本文件路径
registerCss
根据将css文件保存到view的cssFiles中 $this->cssFiles[$key] key如果是null则为该js脚本文件路径

endPage中..

  echo strtr($content, [
self::PH_HEAD => $this->renderHeadHtml(), //这里会替换$this->head()的字符窜为css
self::PH_BODY_BEGIN => $this->renderBodyBeginHtml(),//替换$this->beginBody()的字符窜为POS_BEGIN的js
self::PH_BODY_END => $this->renderBodyEndHtml($ajaxMode),//替换$this->endBody()的字符窜为POS_END的js
]);
beginBody,endBody,head.除了会输出替代的字符窜..还会触发一个事件..所以要改什么的可以作为事件进行处理.endBody还会注册bundle中的js和css..endpage则会替换这些并触发一个事件

AssetBundle

AssetBundle->register 将bundle注册到$view的$assetBundles中,同时处理依赖和文件位置

AssetBundle->publish()

  • 如果sourcePath存在,则发布该目录下的内容并返回发布的路径设置到basePath和baseUrl上,不存在sourcePath的话则不用发布.直接使用baseurl和basepath
  • 补全js和css的basePath并根据后缀名做转换

AssetBundle->registerAssetFiles 将css和js使用$view->registerXXFile.注册到视图中

AssetManager

  • 1.assets的作用是方便模块化,插件化的,一般来说出于安全原因不允许通过url访问protected下面的文件 ,但是我们又希望将module单独出来,所以需要使用发布,即将一个目录下的文件复制一份到assets下面方便通过url访问
  • 2.如果一个模块需要添加使用资源,直接从webroot中引用添加即可。
    但是试图创建一个模块能够在任何地方引用,且资源独立并能够避免命名冲突 。
    你如何保证你的文件名不会与一些零散的应用程序的尝试使用相同名称的文件冲突,对于js,images,css也一样。
    通过AssetManager,Yii::$app->assetManager能够自动的将私有资源publish到公共目录下webroot/assets
  • 3.第二个参数强制更新,开发中设置为true...产品中改为false..可用yii_debug判断

getBundle---会返回bundle对象,并发布
getConverter -- 资源转换器

publish--- 将发布的文件或者目录.copy到assets目录下.并返回地址

//先发布..后注册
$path = ""
$path = AssetManager->publish($path)
$this->registerCss($path);
//所以衍生出了assetBundle的使用

这种使用注册css和js的好处.同一个layout,在不同的页面可以有不同js和css...延迟注册了jscss

比如..a页面需要a.js,b页面需要b.js

在同一个布局下面..不适用注册的方式:

会把head部分</header>放在页面模板中,并在之前加载需要的js..这就破坏了布局的可读性.

使用这种注册方式,则不会..

布局统一,将需要的js和css注册在一起,最后endPage的时候一起输出..

挂件使用bundle

一般在模板文件中,先注册挂件使用js和css的bundle,再使用挂件

yii2中的资源....的更多相关文章

  1. yii2之前端资源引入

     PS:因新项目后端使用yii2框架,不在使用纯html模板的方式搭建页面(前后端不分离模式)使用yii2的内置boostart封装模板,遂研究了一番yii2 通过yii2官方下载的基础文件结构 其中 ...

  2. yii2中如何使用modal弹窗之基本使用

    作者:白狼 出处:http://www.manks.top/yii2_modal_baseuse.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接, ...

  3. Pyqt 获取打包二进制文件中的资源

    记得有一次打开一个单独exe程序,点击btn中的一个帮助说明按钮,在同级目录下就多出一个help.chm 文件并自动打开. 那这个exe肯定是把help.chm 打包到exe中,当我触发“帮助”按钮的 ...

  4. Yii2中多表关联查询(join、joinwith)

    我们用实例来说明这一部分 表结构 现在有客户表.订单表.图书表.作者表, 客户表Customer   (id  customer_name) 订单表Order      (id  order_name ...

  5. PHP在yii2中封装SuperSlide 幻灯片编写自己的SuperSlideWidget的例子

    因为近期给朋友公司做个门户网站,把荒置了6.7年的PHP又重新拾起,发现PHP这些年兴旺多了,很多新的东西看的不明不白,研究了几个框架ZendFramework.thinkphp.Symfony.yi ...

  6. [moka同学笔记]Yii2中多表关联查询(join、joinwith) (摘录)

    表结构 现在有客户表.订单表.图书表.作者表, 客户表Customer   (id  customer_name) 订单表Order          (id  order_name       cu ...

  7. Yii2.0中文开发向导——Yii2中多表关联查询(join、joinwith)(转)

    我们用实例来说明这一部分 表结构 现在有客户表.订单表.图书表.作者表, 客户表Customer   (id  customer_name) 订单表Order          (id  order_ ...

  8. Windows Store App 全球化:引用分离资源文件中的资源

    大部分应用程序仅需要单个默认资源文件,例如Strings/zh-CN/Resources.resw,但是在某些应用程序中,最好将资源分离到多个资源文件中,以便更好地组织资源内容,这样就需要考虑如何引用 ...

  9. Yii2.0中文开发向导——Yii2中多表关联查询(join、joinwith)

    我们用实例来说明这一部分 表结构 现在有客户表.订单表.图书表.作者表, 客户表Customer   (id  customer_name) 订单表Order          (id  order_ ...

随机推荐

  1. [Android Studio] Android Studio如何查看branch列表及切换branch(转载)

    转载地址:http://blog.csdn.net/hyr83960944/article/details/36185231 用Git bash去切换相信大家都会,一行命令行搞定的问题.而在Andro ...

  2. SQL用例集锦

    SQL 语句分类 DDL - 数据定义语句 (CREATE,ALTER,DROP,DECLARE) DML - 数据操纵语句 (SELECT,DELETE,UPDATE,INSERT) DCL - 数 ...

  3. hadoop文件系统与I/O流

    本文地址:http://www.cnblogs.com/archimedes/p/hadoop-filesystem-io.html,转载请注明源地址. hadoop借鉴了Linux虚拟文件系统的概念 ...

  4. java学习笔记6--类的继承、Object类

    接着前面的学习: java学习笔记5--类的方法 java学习笔记4--类与对象的基本概念(2) java学习笔记3--类与对象的基本概念(1) java学习笔记2--数据类型.数组 java学习笔记 ...

  5. microsoft visual c++与microsoft visual net 版本对应关系

    7.1 -> 2003 8.0 -> 2005 9.0 -> 2008 10.0 -> 2010 11.0 -> 2012 12.0 -> 2013 14.0 -& ...

  6. grafana-zabbix图形简单配置

    连接zabbix数据库 加入dashboard Home--Add--加入dashboad 设置dashboad 设置名字,和标签tag,tag可在输入后回车加入多个 加入简单的一张图,測试能否获取到 ...

  7. Android -- ListView与Adapter

    ListView在Android中有着很重要的作用.Android开发中ListView是比较常用的组件,它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示. 背景              ...

  8. STM32 控制GSM模块收发信息 F407 discovery

    main.c #include "stm32f4_discovery.h" #include <stdio.h> #define LED1_ON GPIO_SetBit ...

  9. js实现可拉伸移动的div

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd&qu ...

  10. cscope无法索引代码树之外的软链接

    http://blog.csdn.net/sudolee/article/details/9052291 背景:为什么非要使用cscope?不用ctags? 尽管ctags可以索引软链接,但是,cta ...