在Yii2中如何恰當的引入js、css對于新手而言是一件較為棘手的事情。很多時候我們對幫助文檔以及廣大網友的教程理解不深,而導致引入失敗,耗費了大量的時間。尤其是對于我們使用bower或composer下載的第三方庫而言。因此,在本文中,我們將介紹如何引入第三方的類庫。該方法誠實有效,且筆者鑒于是仿照Yii源碼所得,厚顏認為較為恰當,不當之處且做笑資,不必直面指出。
假入我們要引入的bootstrap-switch類庫目前處于vendor文件夾下面,我們直觀的考慮能夠使用AssetBundle引入。在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',
];
}
像往常引入單獨的js文件一樣,我們自然的使用
public $js = [
'@vendor/....';
];
But,發現這個路徑沒有被正確的解析出來,那好,我們手動解析,
public $js = [
Yii::getAlias('@vendor/....');
];
But,錯誤繼續,這不能作為js的默認值。這可如何是好,本人才淺,著實迷糊了半天。后來想到yii2自身也引入了一些js、css類庫,我何不仿照它來做。打開vendor/yiisoft/yii2/web/YiiAsset.php,內容大致為
class YiiAsset extends AssetBundle
{
public $sourcePath = '@yii/assets';
public $js = [
'yii.js',
];
public $depends = [
'yii\web\JqueryAsset',
];
}
瞬間恍然大悟,原來他對不同位置的類庫單獨定義了一些AssetBundle,而在sourcePath的默認值中可以使用別名。那么依葫蘆畫瓢子,就這樣
class SwitchAsset extends AssetBundle {
public $sourcePath = '@vendor/bower/bootstrap-switch/dist';
public $js = [
'js/bootstrap-switch.min.js',
];
public $css = [
'css/bootstrap3/bootstrap-switch.min.css',
];
}
然后在需要引入這個庫的視圖文件中加入
SwitchAsset::register($this);
完美一擊。