天天看點

yii widget 請确認它指向一個存在的php檔案,Yii2 Day 6: 建立Widget

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']);