如何将参数值添加到 AppAssets Yii2

How to add param value to AppAssets Yii2

我在 $config 参数中定义了 recaptcha 密钥:

$config['params'] = [
    'recaptcha_private' => 'SECRET',
    'recaptcha_public' => 'NOT_SECRET'
];

如何将此参数添加到 AppAssets?

class AppAsset extends AssetBundle
{
    public $basePath = '@webroot';
    public $baseUrl = '@web';
    public $cssOptions = ['rel'=>"stylesheet preload",'as'=>'style'];
    public $css = [
        /*SOME CSS*/
    ];
    public $js = [
        'https://www.google.com/recaptcha/api.js?render=HERE I NEED NOT_SECRET KEY'
    ];
    public $depends = [];
}

您可以像这样覆盖资产包中的 init() 方法

class AppAsset extends AssetBundle
{
    public $basePath = '@webroot';
    public $baseUrl = '@web';
    public $cssOptions = ['rel'=>"stylesheet preload",'as'=>'style'];
    public $css = [
        /*SOME CSS*/
    ];
    public $js = [
        'https://www.google.com/recaptcha/api.js?render=',
    ];
    public $depends = [];

    public function init()
    {
        parent::init();
        $this->js[0] .= Yii::$app->params['recaptcha_public'];
    }
}

覆盖AssetBundle的init方法时不要忘记调用parent::init()。但是这种方法可能会在以后引起问题,因为您在配置中自定义资产包时必须小心附加密钥。

更安全的变体可能是使用自定义设置 js url 以及 web.php 配置中的密钥。

return [
    // ...
    'components' => [
        'assetManager' => [
            'bundles' => [
                'app\assets\AppAset' => [ //modify to match your namespace
                    'js' => [                                          
                        'https://www.google.com/recaptcha/api.js?render=RECAPTCHA_PUBLIC_KEY',
                    ],
                ],
            ],
        ],
    ],
];