Yii2资产 - 子资源完整性

时间:2018-04-22 16:03:33

标签: php yii2 yii2-advanced-app

我正在处理所有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',
    ];
}

任何替代方案?

1 个答案:

答案 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' ],
    ];

请记住

  

"哈希算法必须是sha256sha384sha512之一,   然后是' - ' 。字符"

您的代码如下所示

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',
    ];
}
相关问题