CWidget是所有Widget的基類。CWidget是自包含組件,可以看出是MVC的簡略版,CWidget相比Controller,既沒有actions,也沒有filters
widget,英文意思為小工具,小掛件,在程序里大概也是這個意思,Yii2中叫做組件,這個示例僅僅是寫一個基本的Yii2 widget,看看能不能運行。
關(guān)于widgets,他們在yii中的關(guān)系如下
system.web.widgets 系統(tǒng)自帶最基本的widget
zii.widgets 是基本擴展
zii.widgets.grid 是基本擴展的重要分支
zii.widgets.jui 是插件擴展
一,system.web.widgets
包括:
- CActiveForm
- CAutoComplete
- CClipWidget
- CContentDecorator
- CFilterWidget
- CFlexWidget
- CHtmlPurifier
- CInputWidget
- CMarkdown
- CMaskedTextField
- CMultiFileUpload
- COutputCache
- COutputProcessor
- CStarRating
- CTabView
- CTextHighlighter
- CTreeView
- CWidget
看vendor/yiisoft/yii2/base/Widget.php的定義,widget需要繼承這個類,begin,end,widget,run這些方法都可以在子類進行重寫定義,這里我們重寫run試試。
新建一個類Testwidgets.php:
- namespace common/widgets;
- use yii/base/Widget;
- //Vevb.com
- class Testwidgets extends Widget
- {
- public function __Construct()
- {
- echo 'test test ...';
- }
- public function run()
- {
- echo 'run run run ...';
- }
- }
在一個模板文件中這樣使用:
- <?php
- /* @var $this yii/web/View */
- use common/widgets/Testwidgets;
- ?>
- <p>
- <?php echo Testwidgets::widget();?>
- </p>
頁面輸出:test test …run run run …
是不是很簡單,當然這只是一個最簡單的Yii2 widget,只是搞清楚寫widget的基本方式.
比如Yii2的表單widget,涉及到很多用法,就要定義額外的類和方法來實現(xiàn)需求.
- <?php $model = new User();?>
- <?php $form = ActiveForm::begin(['id'=>'login-form']);?>
- <?= $form->field($model,'username')->label('用戶名') ?>
- <?= $form->field($model,'password_hash')->passwordInput()->label('密碼') ?>
- <?php ActiveForm::end() ;?>
這樣就很方便生成一個表單,而且可以靈活設(shè)置各種屬性,其實原理都是一樣的.
關(guān)于Yii2的表單widget,可以好好研究一下,寫的很妙,兩個文件:
vendor/yiisoft/yii2/widgets/ActiveForm.php和
vendor/yiisoft/yii2/widgets/ActiveField.php
使用示例:
Yii2封裝了一個表單widget,很方便生成各類各式的表單,試了幾種表單,可以自由設(shè)置樣式、類型、屬性,如下代碼:
- <?php $model = new User();?>
- <?php $form = ActiveForm::begin(['id'=>'login-form']);?>
- <?= $form->field($model,'username')->label('用戶名') ?>
- <?= $form->field($model,'password_hash')->passwordInput()->label('密碼') ?>
- <?= $form->field($model,'email')->textarea(['rows'=>5]) ?>
- <?= $form->field($model,'status')->checkboxList([1=>'hehe',2=>'haha',3=>'xixi',4=>'heihei'],['id'=>'dddd'])->label('多選') ?>
- <?php ActiveForm::end() ;?>
如果想更全面了解如何使用,還是需要看一看源碼,才能更好的靈活使用yii2的生成表單widget.
源碼文件位置:vendor/yiisoft/yii2-gii/components/ActiveField.php
新聞熱點
疑難解答