入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

Yii2-资源管理(Assets)

创建时间:2015-05-13 投稿人: 浏览次数:4605

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   useyiiwebAssetBundle asAssetBundle;   classAppAsset extendsAssetBundle {     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 classLanguageAsset extendsAssetBundle {     public$language;     public$sourcePath = "@appassets/language";     public$js = [     ];       publicfunction
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。