Yii1的項目中,積累了大量小部件,爲了在Yii2中使用,須要作一些必要的修改。php
在Yii1的時候,Assets的管理是經過文件方式,一般的作法是在Wiget文件夾中創建一個assets的文件夾,把js,css, 圖像,字體等放到這個文件夾下,而後經過下面的代碼發佈到web目錄下:css
<!-- lang: php --> $assets = dirname(__FILE__) . '/assets'; $baseUrl = Yii::app()->assetManager->publish($assets); Yii::app()->clientScript->registerScriptFile($baseUrl . '/simple.js', CClientScript::POS_END); Yii::app()->clientScript->registerCssFile($baseUrl . '/simple.css');
到了Yii2後,發現沒有clientScript組件了,取而代之的是Assetbundle,即資源包的概念。要實現上面幾行一樣的功能,須要創建資源包類,而後類定義以下:web
<!-- lang: php --> public $sourcePath = '@app/modules/attach/widgets/singleUploader/assets'; public $js = [ 'simple.js', ]; public $css = [ 'simple.css', ]; public $depends = [ 'yii\web\JqueryAsset', ];
把js文件,css文件,以數組的方式賦值給這個Bundle類。簡而言之,就是以OO的方式解決資源包的管理問題。$depends成員變量特別值得注意,它定義了這個資源包的依賴關係。好比上面這個定義,依賴於Jquery庫,直接引入一個JqueryAsset資源包依賴就能夠了,這樣就避免了在多個Widget裏存放多份Jquery文件的尷尬。數組
定義資源包後,在小部件的run方法裏調用註冊,以下:app
<!-- lang: php --> $view = $this->getView(); UploaderAsset::register($view);
這樣就完成了資源文件的拷貝過程,比1.x相比,管理上更方便了。yii
調用過程和1.x同樣,只是如今流行用靜態調用,方便IDE代碼自動提示,效率進一步獲得提高:字體
<!-- lang: php --> use app\modules\attach\widgets\singleUploader\SingleUploadWidget; echo SingleUploadWidget::widget(['ctrlName'=>'user_file']);