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