Yii2如何仅在某些模块中启用默认资产

时间:2014-12-09 19:53:04

标签: yii2

我正在使用基本的yii2应用程序,我已经在web.php配置中禁用了boostrap css和js,但我想在名为admin的模块中启用它。

我尝试在admin模块文件夹下的config.php中添加这样的组件部分,但没有运气!

'assetManager' => [
       'bundles' => [
           'yii\bootstrap\BootstrapPluginAsset' => [
                'js'=> ['js/boostrap.js']
            ],
           'yii\bootstrap\BootstrapAsset' => [
               'css' => ['css/boostrap.min.css']
           ]
        ],
    ],

我怎样才能实现这个目标?

2 个答案:

答案 0 :(得分:4)

在您的模块的init()方法中,您可以覆盖 存在资产包,如下所示:

public function init() {
    \Yii::$app->assetManager->bundles['yii\bootstrap\BootstrapAsset'] = [
        'css' => ['css/bootstrap_NEW.css']
    ];
    parent::init();
}

在上面的示例中,我们在模块中覆盖了yii\bootstrap\BootstrapAsset CSS文件。因此,在此模块中,它使用bootstrap_NEW.css而不是默认值。

请注意,您可以在全球范围内的应用程序中执行此操作,而不是专门在模块的init()方法中执行此操作。这只是一个解决这个具体案例的建议。

答案 1 :(得分:4)

您应该使用资产包来处理此问题,无需修改assetManager

要停用Bootstrap,只需将其从$depends中的AppAsset删除:

public $depends = [
    'yii\web\YiiAsset',
];

在您的模块中创建一个ModuleAsset类:

class ModuleAsset extends \yii\web\AssetBundle
{
    public $depends = [
        'yii\bootstrap\BootstrapAsset',
    ];
}

确保在模块的视图中注册它(您可以使用自定义布局):

ModuleAsset::register($this);

了解详情:http://www.yiiframework.com/doc-2.0/guide-structure-assets.html