yii2中的资源....
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中的资源....的更多相关文章
- yii2之前端资源引入
PS:因新项目后端使用yii2框架,不在使用纯html模板的方式搭建页面(前后端不分离模式)使用yii2的内置boostart封装模板,遂研究了一番yii2 通过yii2官方下载的基础文件结构 其中 ...
- yii2中如何使用modal弹窗之基本使用
作者:白狼 出处:http://www.manks.top/yii2_modal_baseuse.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接, ...
- Pyqt 获取打包二进制文件中的资源
记得有一次打开一个单独exe程序,点击btn中的一个帮助说明按钮,在同级目录下就多出一个help.chm 文件并自动打开. 那这个exe肯定是把help.chm 打包到exe中,当我触发“帮助”按钮的 ...
- Yii2中多表关联查询(join、joinwith)
我们用实例来说明这一部分 表结构 现在有客户表.订单表.图书表.作者表, 客户表Customer (id customer_name) 订单表Order (id order_name ...
- PHP在yii2中封装SuperSlide 幻灯片编写自己的SuperSlideWidget的例子
因为近期给朋友公司做个门户网站,把荒置了6.7年的PHP又重新拾起,发现PHP这些年兴旺多了,很多新的东西看的不明不白,研究了几个框架ZendFramework.thinkphp.Symfony.yi ...
- [moka同学笔记]Yii2中多表关联查询(join、joinwith) (摘录)
表结构 现在有客户表.订单表.图书表.作者表, 客户表Customer (id customer_name) 订单表Order (id order_name cu ...
- Yii2.0中文开发向导——Yii2中多表关联查询(join、joinwith)(转)
我们用实例来说明这一部分 表结构 现在有客户表.订单表.图书表.作者表, 客户表Customer (id customer_name) 订单表Order (id order_ ...
- Windows Store App 全球化:引用分离资源文件中的资源
大部分应用程序仅需要单个默认资源文件,例如Strings/zh-CN/Resources.resw,但是在某些应用程序中,最好将资源分离到多个资源文件中,以便更好地组织资源内容,这样就需要考虑如何引用 ...
- Yii2.0中文开发向导——Yii2中多表关联查询(join、joinwith)
我们用实例来说明这一部分 表结构 现在有客户表.订单表.图书表.作者表, 客户表Customer (id customer_name) 订单表Order (id order_ ...
随机推荐
- TeX系列: MATLAB和LaTeX结合绘图
目的是在MATLAB中绘图,在LaTeX中利用PGFPlots实现对图的修饰,比如坐标系.坐标轴标记.标题等等.这样能够保证图的中标记与正文文本的一致性,同时又可利用MATLAB强大的数据处理和丰富的 ...
- [Python爬虫] 之五:Selenium 处理滚动条
selenium并不是万能的,有时候页面上操作无法实现的,这时候就需要借助JS来完成了. 当页面上的元素超过一屏后,想操作屏幕下方的元素,是不能直接定位到,会报元素不可见的.这时候需要借助滚动条来拖 ...
- php 中array_multisort排序,类似于对数据库中的记录依次按多列进行排序
array_multisort这个函数还是很有用的. ------------------------------------------------------------------------- ...
- [多校2015.02.1006 高斯消元] hdu 5305 Friends
题意: 给你n个人m条关系 每条关系包括a,b 代表a和b能够是线上朋友也能够是线下朋友 然后保证每一个人的线上朋友数和线下朋友数相等 问你有多少种组成方法 思路: 官方题解是爆搜+剪枝,然而并不会写 ...
- Linux下双物理网卡设置成虚拟网卡
为了提供网络的高可用我们须要将多块网卡绑定设置成一块虚拟的网卡对外提供服务,这样能够防止一块网卡损坏或者防止网线连接故障造成的连接中断. 以下我们使用eth0与eth1来虚拟成为bond0为例:--- ...
- 在Eclipse中开发angularjs
当然了,直接用Eclipse开发,完全没问题.我只是需要加个智能感知,安装一个Eclipse插件. Eclipse菜单->Help->Eclipse Marketplace 安装完以后,项 ...
- 双硬盘Win7装Ubuntu 12.04经验并解决无线网络不能使用问题
RFKill Many computer systems contain radio transmitters, including Wi-Fi, Bluetooth, and 3G devices. ...
- 通过反射获取class文件中的构造方法,运行构造方法
/* * 通过反射获取class文件中的构造方法,运行构造方法 * 运行构造方法,创建对象 * 1.获取class文件对象 * 2.从class文件对象中,获取需要的成员 * * Constructo ...
- 苹果开发——向App Store提交应用
原地址:http://zengwu3915.blog.163.com/blog/static/2783489720137410539278/ 完成一个app应用后,肯定是要提交的,下面聊一下关于向Ap ...
- CSDN日报20170401 ——《假设你还是“程序猿”,我劝你别创业!》
[程序人生]假设你还是"程序猿".我劝你别创业! 作者:北漂周 在IT这一行做得久了,会接触到无数让人哭笑不得的外行话. 「我们就差一个写代码的了」是当中典型的一种,之所以黑它.不 ...