Yii1的項目中,積累了大量小部件,為了在Yii2中使用,需要做一些必要的修改。
Assets管理
在Yii1的時候,Assets的管理是通過檔案方式,通常的做法是在Wiget檔案夾中建立一個assets的檔案夾,把js,css, 圖像,字型等放到這個檔案夾下,然後通過下面的代碼釋出到web目錄下:
$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,即資源包的概念。要實作上面幾行同樣的功能,需要建立資源包類,然後類定義如下:
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方法裡調用注冊,如下:
$view = $this->getView();
UploaderAsset::register($view);
這樣就完成了資源檔案的拷貝過程,比1.x相比,管理上更友善了。
調用小部件
調用過程和1.x一樣,隻是現在流行用靜态調用,友善IDE代碼自動提示,效率進一步得到提升:
use app\modules\attach\widgets\singleUploader\SingleUploadWidget;
echo SingleUploadWidget::widget(['ctrlName'=>'user_file']);