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_ ...
随机推荐
- Python学习(四)数据结构 —— set frozenset
集合类型 set frozenset 赋值及去重 set 是一个无序不重复元素集,还有个frozenset 类型(顾明思议,就是不可改变元素的集合): 基本功能包括关系测试和消除重复元素:set支持 ...
- TYVJ 2002 扑克牌 题解
P2002 扑克牌 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 Admin生日那天,Rainbow来找Admin玩扑克牌……玩着玩着Rainbow觉得太没 ...
- windows环境按照dcm4chee
背景: dcm4chee是dcm4che开源项目中的一部分,是一款符合IHE规定的影像管理/归档应用.dcm4chee遵循DICOM.HL7标准,实现了图像存储.图像提取.及健康领域的工作流程管理.d ...
- 【转载】秒杀场景下MySQL的低效原因和改进以及Redis的处理
分享的PPT在如下网址: http://www.doc88.com/p-4199037770087.html 秒杀场景下mysql的低效原因和改进 另外有一个篇文章是针对以上内容的总结: http:/ ...
- const 与过载
1.方法包括方法名,返回类型,形参表,修饰符. 2.对于一个方法,const可以出现的地方有返回类型,形参表,和方法后(const成员方法). 3.返回类型的常量性(是否为const)不同,不能构成过 ...
- C++ 中特殊的用法
1.反斜杠 a.转义字符 b.强制换行,当一行代码很长时,在这一行中间加上反斜杠,分成两行,反斜杠前后不能有空格.在预编译的的时候,会合成一行. 2.String^ 表明String是一个托管类型的指 ...
- GIS中要素的捕捉以及C++实现
这篇文章早在去年就写出来了,但是由于当时毕业论文有一段是直接引用了我的这篇文章,怕引起查重的麻烦就删掉了,在此,重新挂出来和大家一起分享. 要素的选择,也称为要素的捕捉,在CAD.计算机图形学和地理信 ...
- 转换到 StoryBoard 的公布说明(Converting to Storyboards Release Notes)
转换到 StoryBoard 的公布说明(Converting to Storyboards Release Notes) 太阳火神的漂亮人生 (http://blog.csdn.net/opengl ...
- 阿里云服务器 centos7 ftp安装
昨天租了阿里云服务器一个月,想玩一下linux系统,结果想用ftp上传本地文件的时候,发现用不了,结果在安装配置的时候折腾了几个小时,在网上查了无数的资料,有的说要改配置文件,有的说要关防火墙,说啥的 ...
- python发送QQ邮箱方法
import smtplib from email.mime.text import MIMEText mail_user = "user1@qq.com" mail_pwd = ...