2016-11-22 83 views
0

AppAsset帶有yii2基本如何覆蓋默認CSS上yii2在控制器

class AppAsset extends AssetBundle 
{ 
    public $basePath = '@webroot'; 
    public $baseUrl = '@web'; 
    public $css = [ 
     'css/site.css', 
    ]; 
    public $js = [ 
    ]; 
    public $depends = [ 
     'yii\web\YiiAsset', 
     'yii\bootstrap\BootstrapAsset', 
    ]; 
} 

我的主控制器

class MainController extends \yii\base\Controller { 

    public function init() 
    { 
     parent::init(); 
    } 

    public function beforeAction($action) { 
     if(Yii::$app->request->get('site')) { 
      // remove css/site.css 
      // add css/other.css 
     } 

     return parent::beforeAction($action); 
    } 

    public function actionErro() 
    { 
     return $this->render('erro'); 
    }  

} 

我需要刪除CSS /的site.css並添加一個新的,另一個名字,就像上面的代碼一樣!

謝謝!

回答

0

最簡單的方法是創建擁有所有舊的AppAsset依賴項的自己的Asset,但使用自定義css並註冊它而不是AppAsset。

+0

我怎麼會登記控制器上的appset? 我試過像這樣: '$ cs = Yii :: app() - > clientScript; $ cs-> registerCssFile('/ css/layout_01.css');' 但它不適用於我 – Maicon

+0

您在視圖中註冊資產,最好是在佈局中。 – Bizley

0

你可以只改寫 `

public $css = [ 
    'css/site.css', 
]; 

public $css = [ 
    'css/other.css', 
    'css/other_second.css', 
]; 

(如果有要連接一個以上的CSS)。 同樣適用於js文件。並刪除beforeAction部分。

+0

我需要在控制器的'beforeAction($ action)'方法上註冊。 – Maicon

0

我的解決方案

public function beforeAction($action) { 
    if(Yii::$app->request->get('site')) { 

     Yii::$app->assetManager->bundles = [ 
      'app\assets\AppAsset' => [ 
       'css' => ['css/layout-01.css'], 
      ], 
     ]; 
    } 

    return parent::beforeAction($action); 
}