我正在处理所有Yii2资产包,以整合子资源完整性。所以我现在......
namespace some\amazing\space;
class AmazingAsset extends AssetBundle
{
public $sourcePath = 'path/to/asset/files'; // or
public $baseUrl = '//url/to/asset/files';
public $js = [
'js/amazingscript.min.js',
];
public $jsOptions = [
'integrity' => 'hash-of-js/amazingscript.min.js';
'crossorigin' => 'anonymous',
];
public $depends = [
'some\useful\ThingAsset',
];
}
现在我想为我的捆绑和添加更多令人惊奇的酱汁GET ...
namespace some\amazing\space;
class MoreAmazingAsset extends AssetBundle
{
public $sourcePath = 'path/to/asset/files'; // or
public $baseUrl = '//url/to/asset/files';
public $js = [
'js/amazingscript.min.js',
'js/moreamazingscript.min.js',
];
public $jsOptions = [
'integrity' => 'hash-of-js/amazingscript.min.js';
'crossorigin' => 'anonymous',
];
public $depends = [
'some\useful\ThingAsset',
];
}
但在这里我被卡住了,因为jsOptions
将应用于两个.js文件。我能看到的唯一方法就是把它分成2个捆绑,一个需要另一个......
namespace some\amazing\space;
class MoreAmazingAsset extends AssetBundle
{
public $sourcePath = 'path/to/asset/files'; // or
public $baseUrl = '//url/to/asset/files';
public $js = [
'js/moreamazingscript.min.js',
];
public $jsOptions = [
'integrity' => 'hash-of-js/moreamazingscript.min.js';
'crossorigin' => 'anonymous',
];
public $depends = [
'some\amazing\space\AmazingAsset',
];
}
&安培;然后...
namespace some\amazing\space;
class AmazingAsset extends AssetBundle
{
public $sourcePath = 'path/to/asset/files'; // or
public $baseUrl = '//url/to/asset/files';
public $js = [
'js/amazingscript.min.js',
];
public $jsOptions = [
'integrity' => 'hash-of-js/amazingscript.min.js';
'crossorigin' => 'anonymous',
];
public $depends = [
'some\useful\ThingAsset',
];
}
任何替代方案?
答案 0 :(得分:2)
根据我的理解,您希望能够分别为2 integrity
个文件指定js
属性的哈希,并且当前使用$jsOptions
为所有人提供相同的哈希脚本文件。
如果上述内容正确,您可以在$js
中指定属性,方法是将源指定为数组,如下所示。而不是为它们创建2个单独的AssetBundles
。
public $js = [
['js/some.js','integrity'=>'SOME_SHA_HASH' ],
['js/another.js','integrity'=>'ANOTHER_SHA_HASH' ],
];
请记住
"哈希算法必须是
sha256
,sha384
或sha512
之一, 然后是' - ' 。字符"
您的代码如下所示
namespace some\amazing\space;
class CombinedAmazingAsset extends AssetBundle
{
public $sourcePath = 'path/to/asset/files'; // or
public $baseUrl = '//url/to/asset/files';
public $js = [
['js/amazingscript.min.js','integrity' => 'hash-of-js/amazingscript.min.js'],
['js/moreamazingscript.min.js','integrity' => 'hash-of-js/moreamazingscript.min.js'],
];
public $jsOptions = [
'crossorigin' => 'anonymous',
];
public $depends = [
'some\useful\ThingAsset',
];
}