Yii2 Day 6: 建立Widget

Yii1的項目中,積累了大量小部件,爲了在Yii2中使用,須要作一些必要的修改。php

Assets管理

在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']);
相關文章
相關標籤/搜索