博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
无难度教你学会Yii2的资源管理(Asset Manager) - 发布资源
阅读量:5901 次
发布时间:2019-06-19

本文共 2022 字,大约阅读时间需要 6 分钟。

hot3.png

我们程序所使用的css / js / img 都叫做资源,如何有效的管理是个问题,AssetBundle(资源类)就是管理这个事情的。

我们建立一系列继承于AssetBundle的资源类,并且把他们放到@app\assets下,当某个布局或视图要使用的时候,注册一下就可以了。

先来偷窥下AssetBundle的样子,建立一个yii程序后打开@app\assets\AppAsset文件。

namespace app\assets;use yii\web\AssetBundle;/** * @author Qiang Xue 
* @since 2.0 */class AppAsset extends AssetBundle{ public $basePath = '@webroot'; public $baseUrl = '@web'; public $css = [ 'css/site.css', ]; public $js = [ ]; public $depends = [ 'yii\web\YiiAsset', 'yii\bootstrap\BootstrapAsset', ];}

对,这就是一个资源类,我们也可以自己建立比如AdminAsset、WechatAsset等等。

从AppAsset里你我都可以直观的理解以下事情

  • 我们可以在$css数组里写入相关的css文件
  • 我们可以在$js数组里写入相关的js文件
  • 我们定义的Asset可以依赖于另外一个Asset类

到这里,一个简单的应用就可以了,不过这些非本文内容,我们要更深的理解它,先列目录

  1. 什么是资源位置
  2. 定义一个可发布的资源类

什么是资源位置

了解yii对资源位置的定义将有利于我们学习资源类的发布

  • 源资源: 资源文件和PHP源代码放在一起,不能被Web直接访问, 为了使用这些源资源,它们要拷贝到一个可Web访问的Web目录中成为发布的资源,这个过程称为发布资源,就是我们今天要讲的。
  • 发布的资源: 资源文件放在可通过Web直接访问的Web目录中;
  • 外部资源: 资源文件放在与你的Web应用不同的 Web服务器上;

对于发布的资源和外部资源比较好理解,Asset类会将其直接渲染到视图中,而源资源我们要注意下,它在程序目录下(不可访问),那么我们的Asset是如何将源资源转移到web目录下就是一个技术问题了。

yii的约定如下:必须设置sourcePath属性, 其路径的资源会被当作源资源,否则就表示这些资源为发布的资源,当然我们也需要置顶basePath告知将来资源文件所在的web目录。

定义一个可发布的资源类

例子永远是最好的老师,我们现在就开始定义一个源资源并且将其发布到web目录下。

alt

/assets下,不传img文件夹。

我们先构建一个资源类@app\assets\PAsset.php

namespace app\assets;use yii\web\AssetBundle;use yii\web\View;class PAsset extends AssetBundle{	public $sourcePath = '@app/res/test';			public $jsOptions = [		'position'=>View::POS_HEAD	];		public $publishOptions = [		'only' => [			'fonts/*',			'css/*',			'test.js'		],		'except'=>[			'img'		]	];}

首先设置$sourcePath,将其源资源目录指定到@app/res/test,这些代码将用于转移。

根据需求,我们要转移css和fonts文件夹,排除img文件夹,因此我们需要对$publishOptions的数组进行配置,使用only和except进行。

这里要注意一个问题,如果我们只是设置了only但是不except img,则img文件夹依然会被转移(但是img里的内容不会转移),所以务必要设置except。

另外你一定注意到了,如果你想转移一个文件夹fonts下所有文件,可以使用*字符。

到此为止你已经建立了一个可以发布的资源类,接下来只需要在相应布局或视图里注册它。

use app\assets\PAsset;PAsset::register($this);

然后你会发现文件已经被转移到/web/assets,搞定。

当然yii的asset要比这强大的多,后续将陆续为你讲解资源的依赖、浏览器兼容、压缩等等功能。

北哥工兵连

转载于:https://my.oschina.net/abei2017/blog/877708

你可能感兴趣的文章
HBase基准性能测试报告
查看>>
软件安装的list(0918)
查看>>
使用quicklz缩小程序体积
查看>>
Java 设计模式专栏
查看>>
在controller中无法通过注解@Value获取到配置文件中定义的值
查看>>
常用Mysql或者PostGresql或者Greenplum的语句总结。
查看>>
用实例讲DynamicResource与StaticResource的区别
查看>>
工控随笔_12_西门子_WinCC的VBS脚本_03_变量类型
查看>>
appium 报错
查看>>
phpquery中文手册
查看>>
微信nickname乱码(emoji)及mysql编码格式设置(utf8mb4)解决的过程
查看>>
【转】C++ 笔试面试题目
查看>>
同步和异步的区别
查看>>
[Leetcode] Search in Rotated Sorted Array
查看>>
委托、Lambda表达式、事件系列02,什么时候该用委托
查看>>
在ASP.NET MVC控制器中获取链接中的路由数据
查看>>
使用ASP.NET Atlas SortBehavior实现客户端排序
查看>>
LightOJ 1274 Beating the Dataset(期望)
查看>>
图像滤镜处理算法:灰度、黑白、底片、浮雕
查看>>
多线程一个错误的例子
查看>>