当前位置:首页 > PHP教程 > php高级应用 > 列表

YII2 WIDGET的学习笔记

发布:smiling 来源: PHP粉丝网  添加日期:2016-08-25 14:13:38 浏览: 评论:0 

CWidget是所有Widget的基类。CWidget是自包含组件,可以看出是MVC的简略版,CWidget相比Controller,既没有actions,也没有filters

widget,英文意思为小工具,小挂件,在程序里大概也是这个意思,Yii2中叫做组件,这个示例仅仅是写一个基本的Yii2 widget,看看能不能运行。

关于widgets,他们在yii中的关系如下

system.web.widgets  系统自带最基本的widget 

zii.widgets  是基本扩展 

zii.widgets.grid  是基本扩展的重要分支 

zii.widgets.jui  是插件扩展

一,system.web.widgets

包括:

  1. CActiveForm  
  2. CAutoComplete  
  3. CClipWidget  
  4. CContentDecorator  
  5. CFilterWidget  
  6. CFlexWidget  
  7. CHtmlPurifier  
  8. CInputWidget  
  9. CMarkdown  
  10. CMaskedTextField  
  11. CMultiFileUpload  
  12. COutputCache  
  13. COutputProcessor  
  14. CStarRating  
  15. CTabView  
  16. CTextHighlighter  
  17. CTreeView  
  18. CWidget 

看vendor/yiisoft/yii2/base/Widget.php的定义,widget需要继承这个类,begin,end,widget,run这些方法都可以在子类进行重写定义,这里我们重写run试试。

新建一个类Testwidgets.php:

  1. namespace common\widgets; 
  2.  
  3. use yii\base\Widget; 
  4. //phpfensi.com 
  5. class Testwidgets extends Widget 
  6.     public function __Construct() 
  7.     { 
  8.         echo 'test test ...'
  9.     } 
  10.  
  11.     public function run() 
  12.     { 
  13.         echo 'run run run ...'
  14.     } 

在一个模板文件中这样使用:

  1. <?php 
  2. /* @var $this yii\web\View */ 
  3.  
  4. use common\widgets\Testwidgets; 
  5.  
  6. ?> 
  7.  
  8. <p> 
  9.     <?php echo Testwidgets::widget();?> 
  10. </p> 

页面输出:test test …run run run …

是不是很简单,当然这只是一个最简单的Yii2 widget,只是搞清楚写widget的基本方式.

比如Yii2的表单widget,涉及到很多用法,就要定义额外的类和方法来实现需求.

  1. <?php $model = new User();?> 
  2. <?php $form = ActiveForm::begin(['id'=>'login-form']);?> 
  3. <?= $form->field($model,'username')->label('用户名') ?> 
  4. <?= $form->field($model,'password_hash')->passwordInput()->label('密码') ?> 
  5. <?php ActiveForm::end() ;?> 

这样就很方便生成一个表单,而且可以灵活设置各种属性,其实原理都是一样的.

关于Yii2的表单widget,可以好好研究一下,写的很妙,两个文件:

vendor/yiisoft/yii2/widgets/ActiveForm.php和

vendor/yiisoft/yii2/widgets/ActiveField.php

使用示例:

Yii2封装了一个表单widget,很方便生成各类各式的表单,试了几种表单,可以自由设置样式、类型、属性,如下代码:

  1. <?php $model = new User();?> 
  2. <?php $form = ActiveForm::begin(['id'=>'login-form']);?> 
  3. <?= $form->field($model,'username')->label('用户名') ?> 
  4. <?= $form->field($model,'password_hash')->passwordInput()->label('密码') ?> 
  5. <?= $form->field($model,'email')->textarea(['rows'=>5]) ?> 
  6. <?= $form->field($model,'status')->checkboxList([1=>'hehe',2=>'haha',3=>'xixi',4=>'heihei'],['id'=>'dddd'])->label('多选') ?> 
  7. <?php ActiveForm::end() ;?> 

如果想更全面了解如何使用,还是需要看一看源码,才能更好的灵活使用yii2的生成表单widget.

源码文件位置:vendor/yiisoft/yii2-gii/components/ActiveField.php

Tags: YII2 WIDGET YII2笔记

分享到: