Yii2-资源管理(Assets)
Yii 中的资源(asset) 是一个要引入页面的文件。可以是 CSS, JavaScript 或任何其他文件。框架提供了很多种途径来使用资源,从最简单的方式比如使用标签 <script src="..."> 添加文件(在 视图 一章中描述),到高级应用比如发布不在web目录下的文件,解析Javascript依赖或者最小化CSS,接下来将分别进行描述。
声明资源包
要在网站中定义资源集合,你可以声明一个所谓资源包(asset bundle)的类。这个包定义了一系列资源文件以及它们对于其他资源包的依赖关系。
资源文件可以放在服务器可访问目录也可以隐藏在应用或 vendor 目录内。如果是后者,资源包喜欢发布自身到服务器可访问目录以便被网站引入。这个功能对扩展很有用,扩展可以在一个目录装载所有内容,让安装更容易。
要定义一个资源需要创建一个继承自[[yiiwebAssetBundle]]的类并根据需求设置属性。以下是资源定义示例,资源定义是基础应用模板的一部分,即AppAsset
资源包类,它定义了应用必需资源:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?php
use yiiwebAssetBundle
as AssetBundle;
class AppAsset
extends AssetBundle
{
public $basePath
= "@webroot" ;
public $baseUrl
= "@web" ;
//指定资源的根目录
public $css
= [
"css/site.css" ,
];
public $js
= [
];
public $depends
= [
"yiiwebYiiAsset" ,
"yiiootstrapBootstrapAsset" ,
];
}
|
上述 $basePath
指定资源从哪个可网络访问的目录提供服务。这是相对$css
和 $js
路径的根目录,如@webroot/css/site.css
指向 css/site.css
。这里的 @webroot
是指向应用 web
目录的别名。
$baseUrl
用来指定刚才的 $css
和 $js
相对的根
URL ,如 @web/css/site.css
中的 @web
是一个
[别名],对应你的网站根 URL 如 http://example.com/
。
如果你的资源文件放在网络无法访问的目录,Yii 扩展正是如此,这样你必须指定 $sourcePath
而不是 $basePath
and$baseUrl
。原始路径的所有文件在注册前将被复制或符号链接(symlink)到你应用的 web/assets
目录。这种情况下$basePath
和 $baseUrl
将在发布资源包时自动生成。这是发布完整目录的资源工作方式,目录内可以包括图片、前端文件等。
注意: 不要使用
web/assets
目录放你自己的文件。它只用于资源发布。 当你创建网络可访问目录内的文件时,把它们放在类似web/css
或web/js
的文件夹内。
和其他资源包的依赖关系用 $depends
属性指定。这是个包括资源包完整合格类名的数组,资源包内的这些类应发布以便该资源包能正常工作。此例中, AppAsset
的Javascript
和 CSS 文件添加到 header 的[[yiiwebYiiAsset]]和[[yiiootstrapBootstrapAsset]]之后。
这里的[[yiiwebYiiAsset]]添加 Yii 的 JavaScript库,而[[yiiootstrapBootstrapAsset]]包括Bootstrap前端框架。
资源包是常规类,所以如需定义更多资源包,以唯一名创建同样的类即可。新建的类可以放到任何地方,但惯例是放到应用的 assets
目录。
此外,可以在注册和发布资源时指定 $jsOptions
, $cssOptions
和 $publishOptions
参数分别传递到[[yiiwebView::registerJsFile()]],
[[yiiwebView::registerCssFile()]] 和 [[yiiwebAssetManager::publish()]]。
特定语言资源包
如果你想在一个资源包中包含特定语言的JavaScript文件,你可以实现如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
class LanguageAsset
extends AssetBundle
{
public $language ;
public $sourcePath
= "@appassets/language" ;
public $js
= [
];
public function
|