Class yii\web\AssetManager
继承 | yii\web\AssetManager » yii\base\Component » yii\base\BaseObject |
---|---|
实现 | yii\base\Configurable |
可用版本自 | 2.0 |
源码 | https://github.com/yiichina/yii2/blob/api/framework/web/AssetManager.php |
AssetManager 管理资源包的配置和加载。
AssetManager 已经默认在 yii\web\Application 里配置到了应用配置。
你可以通过 Yii::$app->assetManager
访问该实例
你仍可以修改其配置,在应用配置的 components
里添加数组,
就像这样:
'assetManager' => [
'bundles' => [
// 在这里重新配置资源包
],
]
关于 AssetManager 的更多使用参考,请查看 前端资源。
公共属性
属性 | 类型 | 描述 | 被定义在 |
---|---|---|---|
$afterCopy | callback | PHP 回调:在复制每个子目录或文件成功之后调用。
此选项仅在发布目录时使用。回调的形式和 $beforeCopy 一样。
这个回调作为参数 afterCopy 传递给 yii\helpers\FileHelper::copyDirectory()。 |
yii\web\AssetManager |
$appendTimestamp | boolean | 是否将时间戳附加到每个已发布资源的 URL 上。
如果为 true,已发布资源的 URL 就会像 /path/to/asset?v=timestamp ,
其中 timestamp 是已发布文件的最后修改时间。
通常情况下,你为资源启用 HTTP 缓存时,可将此属性设置为 true,
因为它会在你更新资源文件时刷新缓存。 |
yii\web\AssetManager |
$assetMap | array | 源资源文件(键)和目标资源文件(值)的映射。 此属性用于支持在某些资源包中修复不正确的资源文件路径。 当资源包在视图中注册时,其 css 和 js 中的每个相对资源文件 都会被这个映射检查。如果找到相应的键, 将作为资源文件的最后部分(如果可用,以 yii\web\AssetBundle::$sourcePath 为前缀), 相应的值将替换资源,并被注册到视图中。 例如,资源文件 `my/path/to/jquery. | yii\web\AssetManager |
$basePath | string | 保存已发布的资源文件的根目录。 | yii\web\AssetManager |
$baseUrl | string | 已发布资源文件可以访问的基链接。 | yii\web\AssetManager |
$beforeCopy | callback | PHP 回调:在复制每个子目录或文件之前调用。
此选项仅在发布目录时使用。如果回调返回 false,
则复制子目录或文件的操作将被取消。
回调的形式:function ($from, $to) ,其中 $from 是子目录或者
要复制的文件,而 $to 是复制目标。
这个回调作为参数 beforeCopy 传递给 yii\helpers\FileHelper::copyDirectory()。 |
yii\web\AssetManager |
$behaviors | yii\base\Behavior[] | List of behaviors attached to this component | yii\base\Component |
$bundles | array|boolean | 资源包配置列表。提供此属性是为了自定义资源包。
在 getBundle() 方法里,当一个资源包被加载,如果它在此处有相应的配置,
这些配置将应用于这个资源包。
数组的键是资源包名称,通常是资源包类名,没有反斜杠的那种。
数组的值是相应的配置,如果值为 false,则意味这
这个资源包被禁用,getBundle() 返回为 null。
如果此属性为 false,则意味全部的资源包都被禁用,
getBundle() 会全部返回 null。
以下示例显示如何禁用 Bootstrap 小部件去使用 bootstrap 的 CSS。
(由于你想使用自己的样式):
` php
[
'yii\bootstrap\BootstrapAsset' => [
'css' => [],
],
]
` |
yii\web\AssetManager |
$converter | yii\web\AssetConverterInterface | 资源编译器。 | yii\web\AssetManager |
$dirMode | integer | 新创建的资源目录的权限。 此值将被 PHP 函数 chmod() 所使用。不设掩码(umask)。 默认值为 0775,意味着目录可以被拥有者和拥有组别读写, 但是其他用户只读。 | yii\web\AssetManager |
$fileMode | integer | 新发布的资源文件的权限。 此值将被 PHP 函数 chmod() 所使用。不设掩码(umask)。 如果未设置,权限将由当前环境确定。 | yii\web\AssetManager |
$forceCopy | boolean | 当目标目录已存在,正发布的目录是否应发布。
此选项仅在发布目录时使用。
你可能希望在开发阶段将其设置为 true 以确保已发布目录始终是最新的。
不要在生产服务器设置此属性,
它会显着降低性能。 |
yii\web\AssetManager |
$hashCallback | callable | PHP 回调:该回调函数将被调用以生成资源目录的哈希值。
回调的形式如下:
function ($path)
其中 $path 资源路径。请注意,$path 可以是资源目录,也可以是单个文件。
对于在 url() 中使用的相对路径的 CSS 文件,
哈希实现应该使用文件的目录路径而不是复制中的资源文件的相对路径。
如果未设置,资源管理器将在 hash 方法中使用 CRC32 和 filemtime。
用 MD4 哈希的一个实现例子:
` php
function ($path) {
return hash('md4', $path);
}
` |
yii\web\AssetManager |
$linkAssets | boolean | 是否使用符号链接发布资源文件。默认为 false,意味着
资源文件件被复制到 $basePath。使用符号链接有这样的好处:发布的资源永远和
源文件一致,并且不需要复制操作。
这在开发过程中特别有用。
但是,使用符号链接对主机环境有特殊要求。
特别是,在 Linux/Unix,和 Windows Vista/2008 或更高版本上才支持符号链接。
此外,需要正确配置某些 Web 服务器,以便可以访问链接过的资源能被 Web 用户访问。
例如,对于 Apache Web 服务器,应添加以下的配置指令到 Web 文件夹:
` apache
Options FollowSymLinks
` |
yii\web\AssetManager |
公共方法
方法 | 描述 | 被定义在 |
---|---|---|
__call() | Calls the named method which is not a class method. | yii\base\Component |
__clone() | This method is called after the object is created by cloning an existing one. | yii\base\Component |
__construct() | Constructor. | yii\base\BaseObject |
__get() | Returns the value of a component property. | yii\base\Component |
__isset() | Checks if a property is set, i.e. defined and not null. | yii\base\Component |
__set() | Sets the value of a component property. | yii\base\Component |
__unset() | Sets a component property to be null. | yii\base\Component |
attachBehavior() | Attaches a behavior to this component. | yii\base\Component |
attachBehaviors() | Attaches a list of behaviors to the component. | yii\base\Component |
behaviors() | Returns a list of behaviors that this component should behave as. | yii\base\Component |
canGetProperty() | Returns a value indicating whether a property can be read. | yii\base\Component |
canSetProperty() | Returns a value indicating whether a property can be set. | yii\base\Component |
className() | Returns the fully qualified name of this class. | yii\base\BaseObject |
detachBehavior() | Detaches a behavior from the component. | yii\base\Component |
detachBehaviors() | Detaches all behaviors from the component. | yii\base\Component |
ensureBehaviors() | Makes sure that the behaviors declared in behaviors() are attached to this component. | yii\base\Component |
getAssetPath() | 返回给定资源的实际文件路径。 | yii\web\AssetManager |
getAssetUrl() | 返回给定资源的实际 URL。 实际的 URL 是通过将指定的资源路径,拼接上 yii\web\AssetBundle::$baseUrl 或者 yii\web\AssetManager::$baseUrl 前缀获得的。 | yii\web\AssetManager |
getBehavior() | Returns the named behavior object. | yii\base\Component |
getBehaviors() | Returns all behaviors attached to this component. | yii\base\Component |
getBundle() | 返回所找的资源包对象。 | yii\web\AssetManager |
getConverter() | 返回资源编译器。 | yii\web\AssetManager |
getPublishedPath() | 返回文件的发布后的路径。 这个方法没有执行任何发布动作, 它仅仅告诉你这个文件或目录是否发布了,以及它发布到了哪里。 | yii\web\AssetManager |
getPublishedUrl() | 返回文件的发布后的 URL 地址。 这个方法没有执行任何发布动作, 它仅仅告诉你这个文件或目录是否发布了,以及它发布到了哪里。 | yii\web\AssetManager |
hasEventHandlers() | Returns a value indicating whether there is any handler attached to the named event. | yii\base\Component |
hasMethod() | Returns a value indicating whether a method is defined. | yii\base\Component |
hasProperty() | Returns a value indicating whether a property is defined for this component. | yii\base\Component |
init() | 初始化组件 | yii\web\AssetManager |
off() | Detaches an existing event handler from this component. | yii\base\Component |
on() | Attaches an event handler to an event. | yii\base\Component |
publish() | 发布文件或目录。 | yii\web\AssetManager |
setConverter() | 设置资源编译器。 | yii\web\AssetManager |
trigger() | Triggers an event. | yii\base\Component |
受保护的方法
方法 | 描述 | 被定义在 |
---|---|---|
hash() | 给目录生成 CRC32 哈希值。 冲突会高于 MD5,但生成的哈希字符串要小得多。 | yii\web\AssetManager |
loadBundle() | 根据名称加载资源包。 | yii\web\AssetManager |
loadDummyBundle() | 按名称加载虚拟资源包。 | yii\web\AssetManager |
publishDirectory() | 发布目录。 | yii\web\AssetManager |
publishFile() | 发布文件。 | yii\web\AssetManager |
resolveAsset() | yii\web\AssetManager |
属性详情
PHP 回调:在复制每个子目录或文件成功之后调用。 此选项仅在发布目录时使用。回调的形式和 $beforeCopy 一样。
这个回调作为参数 afterCopy
传递给 yii\helpers\FileHelper::copyDirectory()。
是否将时间戳附加到每个已发布资源的 URL 上。
如果为 true,已发布资源的 URL 就会像 /path/to/asset?v=timestamp
,
其中 timestamp
是已发布文件的最后修改时间。
通常情况下,你为资源启用 HTTP 缓存时,可将此属性设置为 true,
因为它会在你更新资源文件时刷新缓存。
源资源文件(键)和目标资源文件(值)的映射。
此属性用于支持在某些资源包中修复不正确的资源文件路径。
当资源包在视图中注册时,其 css 和 js 中的每个相对资源文件
都会被这个映射检查。如果找到相应的键,
将作为资源文件的最后部分(如果可用,以 yii\web\AssetBundle::$sourcePath 为前缀),
相应的值将替换资源,并被注册到视图中。
例如,资源文件 my/path/to/jquery.js
匹配了 jquery.js
。
请注意,目标资源文件必须为绝对 URL、相对于域名的 URL(以“/”开头)或者是 相对于 $baseUrl 和 $basePath 的路径。
在以下示例中,任何以 jquery.min.js
结尾的资源都会被替换成 jquery/dist/jquery.js
,
其相对路径是 $baseUrl 和 $basePath。
[
'jquery.min.js' => 'jquery/dist/jquery.js',
]
你还可以用别名指定映射的值,例如:
[
'jquery.min.js' => '@web/js/jquery/jquery.js',
]
保存已发布的资源文件的根目录。
已发布资源文件可以访问的基链接。
PHP 回调:在复制每个子目录或文件之前调用。 此选项仅在发布目录时使用。如果回调返回 false, 则复制子目录或文件的操作将被取消。
回调的形式:function ($from, $to)
,其中 $from
是子目录或者
要复制的文件,而 $to
是复制目标。
这个回调作为参数 beforeCopy
传递给 yii\helpers\FileHelper::copyDirectory()。
资源包配置列表。提供此属性是为了自定义资源包。 在 getBundle() 方法里,当一个资源包被加载,如果它在此处有相应的配置, 这些配置将应用于这个资源包。
数组的键是资源包名称,通常是资源包类名,没有反斜杠的那种。 数组的值是相应的配置,如果值为 false,则意味这 这个资源包被禁用,getBundle() 返回为 null。
如果此属性为 false,则意味全部的资源包都被禁用, getBundle() 会全部返回 null。
以下示例显示如何禁用 Bootstrap 小部件去使用 bootstrap 的 CSS。 (由于你想使用自己的样式):
[
'yii\bootstrap\BootstrapAsset' => [
'css' => [],
],
]
资源编译器。
新创建的资源目录的权限。 此值将被 PHP 函数 chmod() 所使用。不设掩码(umask)。 默认值为 0775,意味着目录可以被拥有者和拥有组别读写, 但是其他用户只读。
新发布的资源文件的权限。 此值将被 PHP 函数 chmod() 所使用。不设掩码(umask)。 如果未设置,权限将由当前环境确定。
当目标目录已存在,正发布的目录是否应发布。
此选项仅在发布目录时使用。
你可能希望在开发阶段将其设置为 true
以确保已发布目录始终是最新的。
不要在生产服务器设置此属性,
它会显着降低性能。
PHP 回调:该回调函数将被调用以生成资源目录的哈希值。 回调的形式如下:
function ($path)
其中 $path
资源路径。请注意,$path
可以是资源目录,也可以是单个文件。
对于在 url()
中使用的相对路径的 CSS 文件,
哈希实现应该使用文件的目录路径而不是复制中的资源文件的相对路径。
如果未设置,资源管理器将在 hash
方法中使用 CRC32 和 filemtime。
用 MD4 哈希的一个实现例子:
function ($path) {
return hash('md4', $path);
}
是否使用符号链接发布资源文件。默认为 false,意味着 资源文件件被复制到 $basePath。使用符号链接有这样的好处:发布的资源永远和 源文件一致,并且不需要复制操作。 这在开发过程中特别有用。
但是,使用符号链接对主机环境有特殊要求。 特别是,在 Linux/Unix,和 Windows Vista/2008 或更高版本上才支持符号链接。
此外,需要正确配置某些 Web 服务器,以便可以访问链接过的资源能被 Web 用户访问。 例如,对于 Apache Web 服务器,应添加以下的配置指令到 Web 文件夹:
Options FollowSymLinks
方法详情
返回给定资源的实际文件路径。
public string|false getAssetPath($bundle, $asset) | ||
$bundle | yii\web\AssetBundle | 资源文件所属的资源包 |
$asset | string | 资源路径。必须是 yii\web\AssetBundle::$js 或者 yii\web\AssetBundle::$css 列表里的资源文件。 |
return | string|false | 实际的文件路径,如果所给资源是是一个绝对 URL,则返回 |
---|
返回给定资源的实际 URL。 实际的 URL 是通过将指定的资源路径,拼接上 yii\web\AssetBundle::$baseUrl 或者 yii\web\AssetManager::$baseUrl 前缀获得的。
public string getAssetUrl($bundle, $asset) | ||
$bundle | yii\web\AssetBundle | 资源文件所属的资源包 |
$asset | string | 资源路径。必须是 yii\web\AssetBundle::$js 或者 yii\web\AssetBundle::$css 列表里的资源文件。 |
return | string | 给定资源的实际 URL。 |
---|
返回所找的资源包对象。
这个方法首先会在 $bundles 你查找。如找不到
它会将 $name
当作资源包的类,并创建一个新实例。
public yii\web\AssetBundle getBundle($name, $publish = true) | ||
$name | string | 资源包的类名称(没有反斜杠前缀) |
$publish | boolean | 是否在返回资源包之前发布资源包中的资源文件。
如果将此设置为 false,则必须手动调用 |
return | yii\web\AssetBundle | 资源包对象实例 |
---|---|---|
throws | yii\base\InvalidConfigException | 如果 $name 没有指向任何合法资源包 |
返回资源编译器。
public yii\web\AssetConverterInterface getConverter() | ||
return | yii\web\AssetConverterInterface | 资源编译器。 |
---|
返回文件的发布后的路径。 这个方法没有执行任何发布动作, 它仅仅告诉你这个文件或目录是否发布了,以及它发布到了哪里。
public string|false getPublishedPath($path) | ||
$path | string | 要发布的资源文件或目录 |
return | string|false | String:已发布的路径。False:如果文件或者目录不存在。 |
---|
返回文件的发布后的 URL 地址。 这个方法没有执行任何发布动作, 它仅仅告诉你这个文件或目录是否发布了,以及它发布到了哪里。
public string|false getPublishedUrl($path) | ||
$path | string | 要发布的资源文件或目录 |
return | string|false | String:已发布的 URL。False:如果文件或者目录不存在。 |
---|
给目录生成 CRC32 哈希值。 冲突会高于 MD5,但生成的哈希字符串要小得多。
protected string hash($path) | ||
$path | string | 将要被哈希的字符串。 |
return | string | 哈希字符串 |
---|
初始化组件
public void init() | ||
throws | yii\base\InvalidConfigException | 如果 $basePath 无效 |
---|
根据名称加载资源包。
protected yii\web\AssetBundle loadBundle($name, $config = [], $publish = true) | ||
$name | string | 资源包名称 |
$config | array | 资源包对象的配置 |
$publish | boolean | 是否发布资源包 |
throws | yii\base\InvalidConfigException | 如果配置无效 |
---|
按名称加载虚拟资源包。
protected yii\web\AssetBundle loadDummyBundle($name) | ||
$name | string |
发布文件或目录。
此方法将指定的文件或目录复制到 $basePath, 以便可以通过Web服务器访问它们。
资源文件将检查其修改时间以避免不必要的文件复制。
资源文件目录则会,其下的所有文件和子目录将以递归方式发布。 注意,如果 $forceCopy 为 false,则该方法仅检查目标文件夹是否存在, 以避免重复复制(这是非常昂贵的)。
默认情况下,以 "." 开头的目录,子目录和文件都不会被发布。
如果要更改此行为,可以设置 "beforeCopy" 选项,
如 $options
参数中所述。
Note:在极端场景下,可能会形成竞争条件,导致在创建已发布的资源文件的目录时, 产生非关键问题的一次性表现。(就是并发请求同时触发布的问题) 但可以完全避免这个问题, 先发一个 “请求”,以触发所有会调用 'publish()' 的资源的发布, 在应用程序部署阶段,在系统上线之前就先这么做。 关于此问题更多的讨论请查看: http://code.google.com/p/yii/issues/detail?id=2579
public array publish($path, $options = []) | ||
$path | string | 要发布的资源文件或目录 |
$options | array | 发布目录时要应用的选项。 支持以下选项:
|
return | array | 已发布的目录或者文件的路径和 URL 地址。 |
---|---|---|
throws | yii\base\InvalidArgumentException | 如果要发布的资源不存在。 |
发布目录。
protected string[] publishDirectory($src, $options) | ||
$src | string | 将要发布的目录 |
$options | array | 发布目录时要应用的选项。 支持以下选项:
|
return | string[] | 已发布的目录的路径和 URL 地址。 |
---|---|---|
throws | yii\base\InvalidArgumentException | 如果要发布的资源不存在。 |
发布文件。
protected string[] publishFile($src) | ||
$src | string | 将要发布的资源文件 |
return | string[] | 已发布好的资源文件路径和 URL。 |
---|---|---|
throws | yii\base\InvalidArgumentException | 如果要发布的资源不存在。 |
protected string|boolean resolveAsset($bundle, $asset) | ||
$bundle | yii\web\AssetBundle | |
$asset | string |
设置资源编译器。
public void setConverter($value) | ||
$value | array|yii\web\AssetConverterInterface | 资源编译器。可以是个 实现了 yii\web\AssetConverterInterface 的对象,也可以是 用来创建编译器对象的数组配置。 |