如何在Yii2中选择性重定义资源包,仅覆盖CSS不修改JS文件?
解决方案
错误原因
你的原有配置修改了资源包的全局路径属性:sourcePath设为null、同时自定义了basePath和baseUrl,相当于强制Yii从你指定的站点根目录查找该资源包的所有静态文件(包括JS),自然会修改JS文件的加载路径,无法加载原包的JS资源。
正确配置
仅覆盖css属性即可,不要修改任何路径相关的全局配置,未显式配置的属性会自动沿用原资源包的默认值,JS文件就会正常加载原包的最新版本:
'components' => [ 'assetManager' => [ 'bundles' => [ 'kartik\form\ActiveFormAsset' => [ // 仅替换CSS配置,删除sourcePath、basePath、baseUrl的自定义配置 'css' => [ // 以/开头的路径会被Yii直接识别为站点根目录相对路径,不会拼接原包的源路径 '/custom.css', ] ], ], ], ],
可选扩展场景
- 如果你需要保留原资源包自带的CSS,仅追加自定义样式覆盖部分规则,可在
css数组中先保留原包的CSS文件名:
'css' => [ 'css/activeForm.css', // 原包自带的CSS文件路径,与原资源包定义保持一致 '/custom.css', // 你的自定义样式,优先级更高会覆盖同名规则 ],
- 如果你需要完全禁用原资源包的所有CSS,又不想修改其他属性,可以将对应CSS文件设为
false,再单独注册你的自定义CSS:
'kartik\form\ActiveFormAsset' => [ 'css' => [ 'css/activeForm.css' => false, // 禁用原包的CSS文件 ], ],
内容的提问来源于stack exchange,提问作者Павел Макаров
相关产品推荐
相关产品推荐

