详解PHP的Yii框架中自带的前端资源包的使用

Yii中的资源是和Web页面相关的文件,可为CSS文件,JavaScript文件,图片或视频等, 资源放在Web可访问的目录下,直接被Web服务器调用。

通过程序自动管理资源更好一点,例如,当你在页面中使用 yii\jui\DatePicker 小部件时, 它会自动包含需要的CSS和JavaScript文件,而不是要求你手工去找到这些文件并包含, 当你升级小部件时,它会自动使用新版本的资源文件,在本教程中,我们会详述Yii提供的强大的资源管理功能。

资源包

Yii在资源包中管理资源,资源包简单的说就是放在一个目录下的资源集合, 当在视图中注册一个资源包,在渲染Web页面时会包含包中的CSS和JavaScript文件。

定义资源包

资源包指定为继承yii\web\AssetBundle的PHP类,包名为可自动加载的PHP类名, 在资源包类中,要指定资源所在位置,包含哪些CSS和JavaScript文件以及和其他包的依赖关系。

如下代码定义基础应用模板使用的主要资源包:

<?php namespace app\assets; use yii\web\AssetBundle; 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', ]; }

如上AppAsset 类指定资源文件放在 @webroot 目录下,对应的URL为 @web,资源包中包含一个CSS文件 css/site.css,没有JavaScript文件, 依赖其他两个包 yii\web\YiiAsset 和 yii\bootstrap\BootstrapAsset, 关于yii\web\AssetBundle 的属性的更多详细如下所述:

yii\web\AssetBundle::sourcePath: 指定包包含资源文件的根目录, 当根目录不能被Web访问时该属性应设置,否则,应设置 yii\web\AssetBundle::basePath 属性和yii\web\AssetBundle::baseUrl。 路径别名 可在此处使用;

yii\web\AssetBundle::basePath: 指定包含资源包中资源文件并可Web访问的目录, 当指定yii\web\AssetBundle::sourcePath 属性, 资源管理器 会发布包的资源到一个可Web访问并覆盖该属性, 如果你的资源文件在一个Web可访问目录下,应设置该属性,这样就不用再发布了。 路径别名 可在此处使用。

yii\web\AssetBundle::baseUrl: 指定对应到yii\web\AssetBundle::basePath目录的URL, 和 yii\web\AssetBundle::basePath 类似,如果你指定 yii\web\AssetBundle::sourcePath 属性, 资源管理器 会发布这些资源并覆盖该属性,路径别名 可在此处使用。
yii\web\AssetBundle::js: 一个包含该资源包JavaScript文件的数组,注意正斜杠"https://www.jb51.net/"应作为目录分隔符, 每个JavaScript文件可指定为以下两种格式之一:

相对路径表示为本地JavaScript文件 (如 js/main.js),文件实际的路径在该相对路径前加上 yii\web\AssetManager::basePath,文件实际的URL在该路径前加上yii\web\AssetManager::baseUrl。

绝对URL地址表示为外部JavaScript文件,如 或//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js.

yii\web\AssetBundle::css: 一个包含该资源包JavaScript文件的数组,该数组格式和 yii\web\AssetBundle::js 相同。

yii\web\AssetBundle::depends: 一个列出该资源包依赖的其他资源包(后两节有详细介绍)。

yii\web\AssetBundle::jsOptions: 当调用yii\web\View::registerJsFile()注册该包 每个 JavaScript文件时, 指定传递到该方法的选项。

yii\web\AssetBundle::cssOptions: 当调用yii\web\View::registerCssFile()注册该包 每个 css文件时, 指定传递到该方法的选项。

yii\web\AssetBundle::publishOptions: 当调用yii\web\AssetManager::publish()发布该包资源文件到Web目录时 指定传递到该方法的选项,仅在指定了yii\web\AssetBundle::sourcePath属性时使用。

资源位置

资源根据它们的位置可以分为:

源资源: 资源文件和PHP源代码放在一起,不能被Web直接访问,为了使用这些源资源,它们要拷贝到一个可Web访问的Web目录中 成为发布的资源,这个过程称为发布资源,随后会详细介绍。
发布资源: 资源文件放在可通过Web直接访问的Web目录中;
外部资源: 资源文件放在你的Web应用不同的Web服务器上;
当定义资源包类时候,如果你指定了yii\web\AssetBundle::sourcePath 属性,就表示任何使用相对路径的资源会被 当作源资源;如果没有指定该属性,就表示这些资源为发布资源(因此应指定yii\web\AssetBundle::basePath 和 yii\web\AssetBundle::baseUrl 让Yii知道它们的位置)。

推荐将资源文件放到Web目录以避免不必要的发布资源过程,这就是之前的例子指定 yii\web\AssetBundle::basePath 而不是 yii\web\AssetBundle::sourcePath.

对于 扩展来说,由于它们的资源和源代码都在不能Web访问的目录下, 在定义资源包类时必须指定yii\web\AssetBundle::sourcePath属性。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/6f5472fdfac644bab6645b0284f2d5de.html