首页 > 代码库 > Yii2 Day 6: 创建Widget

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

Yii2 Day 6: 创建Widget