【YII2】Widget介紹及使用示例

在Yii中,Widgets用於封裝常常使用的視圖view,增長經常使用視圖的複用,它是很是有用的工具。側邊欄、目錄以及其餘應用須要到的,Widgets都能實現。php


CWidget是全部Widget的基類。CWidget是自包含組件,能夠看出是MVC的簡略版,CWidget相比Controller,既沒有actions,也沒有filters。web


widget,英文意思爲小工具,小掛件,在程序裏大概也是這個意思,Yii2中叫作組件,這個示例僅僅是寫一個基本的Yii2 widget,看看能不能運行。yii2


關於widgets,他們在yii中的關係以下:app

  • system.web.widgets  系統自帶最基本的widget yii

  • zii.widgets  是基本擴展 ide

  • zii.widgets.grid  是基本擴展的重要分支 工具

  • zii.widgets.jui  是插件擴展ui


system.web.widgetsthis

包括: spa

    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;

 

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,涉及到不少用法,就要定義額外的類和方法來實現需求。


    <?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() ;?>

這樣就很方便生成一個表單,並且能夠靈活設置各類屬性,其實原理都是同樣的。

關於Yii2的表單widget,能夠好好研究一下,寫的很妙。兩個文件:

vendor/yiisoft/yii2/widgets/ActiveForm.php

vendor/yiisoft/yii2/widgets/ActiveField.php


使用示例

Yii2封裝了一個表單widget,很方便生成各種各式的表單,試了幾種表單,能夠自由設置樣式、類型、屬性,以下代碼:


    <?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

相關文章
相關標籤/搜索