文档章节

Yii2 Day 6: 创建Widget

_Elvis
 _Elvis
发布于 2014/12/18 10:23
字数 452
阅读 6092
收藏 9

Yii1的项目中,积累了大量小部件,为了在Yii2中使用,需要做一些必要的修改。

Assets管理

在Yii1的时候,Assets的管理是通过文件方式,通常的做法是在Wiget文件夹中建立一个assets的文件夹,把js,css, 图像,字体等放到这个文件夹下,然后通过下面的代码发布到web目录下:

<!-- 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,即资源包的概念。要实现上面几行同样的功能,需要建立资源包类,然后类定义如下:

<!-- 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方法里调用注册,如下:

<!-- lang: php -->
 $view = $this->getView();
 UploaderAsset::register($view);

这样就完成了资源文件的拷贝过程,比1.x相比,管理上更方便了。

调用小部件

调用过程和1.x一样,只是现在流行用静态调用,方便IDE代码自动提示,效率进一步得到提升:

<!-- lang: php -->
use app\modules\attach\widgets\singleUploader\SingleUploadWidget;
echo SingleUploadWidget::widget(['ctrlName'=>'user_file']);

© 著作权归作者所有

_Elvis
粉丝 77
博文 41
码字总数 29082
作品 0
海淀
程序员
私信 提问
加载中

评论(1)

crstudioE
crstudioE
那到底怎么创建呢??
kzeng_jack/yii2-app-kit

Yii2 Application Kit 这是基于Yii2 Starter Kit 和 Yii2 Advanced Template 的的Web 应用程序。 ##安装 开始之前 克隆代码仓库 git clone https://git.oschina.net/kzeng/yii2-app-kit.git......

kzeng_jack
2016/05/31
0
0
yii2分页扩展之实现跳转到具体某页

作者:白狼 出处:http://www.manks.top/yii2_linkpager_widget.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任...

白狼栈
2016/06/05
26
0
yii 利用 Pagination 做异步分页

1 php 后端 public function actionPage() { $data = User::find(); //User为model层,在控制器刚开始use了field这个model,这儿可以直接写Field,开头大小写都可以,为了规范,我写的是大写 $pag...

bengozhong
2017/10/27
0
0
YII2 少用的一些扩展 插件等功能 自定义操作按钮 时间插件_会点击不生效---原因可能是有的公司会对框架进行修改,影响到了, 自己下载的项目中可以正常使用 --网上很少有遇到这个问题的.

[ 'attribute' => 'status', 'label' => '状态', 'value' => function ($model) { return $model->status == 1 ? '开启' : '关闭'; }, ], [ 'class' => 'yiigridActionColumn', 'template' =......

兔子想飞
2018/05/23
0
0
yii2组件之多图上传插件FileInput的详细使用

作者:白狼 出处:http://www.manks.top/yii2_multiply_images.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的...

白狼栈
2016/06/23
85
0

没有更多内容

加载失败,请刷新页面

加载更多

容器中的JVM资源该如何被安全的限制?

前言 Java与Docker的结合,虽然更好的解决了application的封装问题。但也存在着不兼容,比如Java并不能自动的发现Docker设置的内存限制,CPU限制。 这将导致JVM不能稳定服务业务!容器会杀死你...

xiaomin0322
22分钟前
3
0
mysql查询最近连续登录和累计登录

这条sql写了一天,百度无数,终于摸到点门路 需求是查询从当前日期向前推的连续登录,比如一个用户他今天登录了,昨天没登,连续登录为1 他昨天前天都登录了,今天没登录,连续登录为0 SELEC...

七月大人
24分钟前
1
0
常用的一些Vip解析

无广告解析推荐(排行不分前后) 黑米免费解析   https://www.myxin.top/jx/api/?url= 随缘免费解析   http://www.syhbyl.tw/jx/api/?url= 快快免费解析   http://jx.kkqtv.com/jx/...

chenhongjiang
24分钟前
2
0
Netty 整合spring bean注入失败。

1.Netty整合spring bean注入为null的问题,自己折腾了好久,试过各种方式(@Component,@PostConstruct)这些都不行。 2.最后发现了关键的问题就是添加的回调类(处理类)/初始化的类也必须由s...

轻量级赤影
29分钟前
7
0
消息中间件

本文大概围绕如下几点进行阐述: 为什么使用消息队列? 使用消息队列有什么缺点? 消息队列如何选型? 如何保证消息队列是高可用的? 如何保证消息不被重复消费? 如何保证消费的可靠性传输? 如何...

石日天
31分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部