yii2中的资源....

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

模板文件显示流程:

  • 1.控制器会在render中,把控制器本身,模板文件传给view
  • 2.呈现模板文件,首先view会查找主题,主题如果拥有模板文件,则优先使用主题内模板文件.并将模板文件赋值给变量$content
  • 3.呈现布局文件,同样查找主题,并将$content作为变量导入
  • 4.引入模板文件时,是发生在view中,所以$this就是view

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中的资源....,布布扣,bubuko.com

时间: 2024-10-09 03:40:38

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

【PHP】Yii2中事务的使用以及代码实例

Yii2中事务的使用以及代码实例 前言 一般我们做业务逻辑,都不会仅仅关联一个数据表,所以,会面临事务问题. 数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行. 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源.通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠.一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性.一致性.隔

yii2之前端资源引入

 PS:因新项目后端使用yii2框架,不在使用纯html模板的方式搭建页面(前后端不分离模式)使用yii2的内置boostart封装模板,遂研究了一番yii2 通过yii2官方下载的基础文件结构 其中frontend 为放置前端文件的文件夹, /frontend/views是放置前端页面(即单页面模块的文件夹) /frontend/web是放置前端资源的文件夹 /frontend/web/assets 是放置前端js资源的文件夹 /frontend/web/css 是放置前端css资源的文件夹

在Linux系统中文件(资源)和用户的管理

一个可执行二进制程序,被加载到内存,被内核调度到CPU上运行,这时候,就表现了一个进程.也可以说进程是程序的一个实例,是程序的动态表现. 在 Linux 系统中进程(process)是有属主的,也就是该进程以哪个用户的身份运行的.大家都知道,程序有输入和输出,也称这为程序IO.如果我们程序数据输入是磁盘.如,Web 服务器,接收用户的请求之后,把网页数据从磁盘中读入加工之后再把数据响应给用户.如果,发起Web 服务进程的用户没有读取该用户请求网页文件的权限.则无法响应用户的请求了.所以,文件(资

Yii2中的模块、应用程序(Module,Application)

原文地址:http://www.kuitao8.com/20140626/2715.shtml 模块(Module ) 模块是一个功能独立的逻辑单元,每一个模块都可以包含有多个子模块,但每个模块只能有一个对应的父模块(如果有的话).它的定义在yii\base\Module 应用程序(Application) Yii2中的应用程序有两种:web应用程序(yii\web\Application)和控制台应用程序(yii\console\Application).他们都继承于yii\base\Appl

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

表结构 现在有客户表.订单表.图书表.作者表, 客户表Customer   (id  customer_name) 订单表Order         (id  order_name   customer_id   book_id) 图书表Book          (id  book_name    author_id) 作者表Author        (id  author_name) 模型定义 下面是这4个个模型的定义,只写出其中的关联 Customer class Customer ex

yii2中添加验证码的实现方法

本文实例讲述了yii2中添加验证码的实现方法.分享给大家供大家参考,具体如下: 首先,在模型中添加验证码字段: ? 1 2 3 public function rules(){ return ['verifyCode', 'captcha'], } 其次,可以在函数attributeLabels中添加前台页面中验证码的字段名称: ? 1 2 3 public function atrributeLabels(){ return ['verifyCode'=>'Verification Code'

eclipse 在Navigator视图中查看资源

随着不断使用Eclipse,Navigator视图中的实体数目会增加.通过在某一项目或文件夹上右击,并在所出现的快捷菜单中选择Go Into命令,你就可以查看该项目或文件夹中的资源了.此时Navigator视图目录将被所选择的项目或文件夹中的资源目录所代替.点击Navigator视图中的Up后,项目或文件夹的资源目录又将被Navigator视图目录所代替.而Forward和Back的功能和Web浏览器中的前进和后退图标的功能相同. 点击Navigator视图中标题栏上的下拉菜单,并在所出现的下拉

[Java基础] 深入jar包:从jar包中读取资源文件

转载: http://hxraid.iteye.com/blog/483115?page=3#comments 我们常常在代码中读取一些资源文件(比如图片,音乐,文本等等).在单独运行的时候这些简单的处理当然不会有问题.但是,如果我们把代码打成一个jar包以后,即使将资源文件一并打包,这些东西也找不出来了.看看下面的代码: //源代码1: package edu.hxraid; import java.io.*; public class Resource { public void getRe

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

大部分应用程序仅需要单个默认资源文件,例如Strings/zh-CN/Resources.resw,但是在某些应用程序中,最好将资源分离到多个资源文件中,以便更好地组织资源内容,这样就需要考虑如何引用这些分离资源文件中的资源.下面通过一个示例讲解如何在后台代码中引用分离资源文件中的字符串资源. 新建一个Windows应用商店的空白应用程序项目,并命名为SeparatedResourcesFiles.在项目中添加如18.2.3小节示例中相同的语言文件夹.资源文件以及资源信息.完成上述操作后,在"z