茄子在线看片免费人成视频,午夜福利精品a在线观看,国产高清自产拍在线观看,久久综合久久狠狠综合

    <s id="ddbnn"></s>
  • <sub id="ddbnn"><ol id="ddbnn"></ol></sub>

  • <legend id="ddbnn"></legend><s id="ddbnn"></s>

    Yii2創(chuàng)建表單(ActiveForm)方法詳解
    來源:易賢網(wǎng) 閱讀:3740 次 日期:2016-08-11 14:13:41
    溫馨提示:易賢網(wǎng)小編為您整理了“Yii2創(chuàng)建表單(ActiveForm)方法詳解”,方便廣大網(wǎng)友查閱!

    本文實例講述了Yii2創(chuàng)建表單(ActiveForm)的方法。分享給大家供大家參考,具體如下:

    由于表單涉及到一些驗證方面的信息,屬性設置又比較多、比較復雜,所以哪里有什么不正確的地方請留言指點

    目錄

    表單的生成

    表單中的方法

    ActiveForm::begin()方法

    ActiveForm::end()方法

    getClientOptions()方法

    其它方法:errorSummary、validate、validateMultiple

    表單中的參數(shù)

    表單form自身的屬性

    表單中各個項(field)輸入框相關的屬性

    $fieldConfig

    關于驗證的屬性

    關于每個field容器樣式的屬性

    ajax驗證

    前端js事件

    表單中的其它屬性

    我們先看看Yii里面最簡單的登錄表單以及生成的html代碼和界面,先有個直觀的了解

    <?php $form = ActiveForm::begin(['id' => 'login-form']); ?>

      <?= $form->field($model, 'username') ?>

      <?= $form->field($model, 'password')->passwordInput() ?>

      <?= $form->field($model, 'rememberMe')->checkbox() ?>

      <div style="color:#999;margin:1em 0">

       If you forgot your password you can <?= Html::a('reset it', ['site/request-password-reset']) ?>

      </div>

      <div class="form-group">

         <?= Html::submitButton('Login', ['class' => 'btn btn-primary', 'name' => 'login-button']) ?>

      </div>

    <?php ActiveForm::end(); ?>

    下面是生成的表單Html,我在里面標明了5部分。

    1、表單的生成

    在Yii中表單即ActiveForm也是Widget,在上面可以看到是由begin開始

    <?php $form = ActiveForm::begin(['id' => 'login-form']); ?>

    中間為各個項的輸入框,最后由end結尾

    <?php ActiveForm::end(); ?>

    2、表單中的方法

    在Widget中begin()方法會調用int方法

    public function init()

    在最后的end()方法會調用run方法

    public function run()

    1、ActiveForm::begin()方法

    //這個是在執(zhí)行 $form = ActiveForm::begin(['id' => 'login-form']); 中的begin方法的時候調用的

    public function init()

    {

        //設置表單元素form的id

        if (!isset($this->options['id'])) {

          $this->options['id'] = $this->getId();

        }

        //設置表單中間的要生成各個field的所使用的類

        if (!isset($this->fieldConfig['class'])) {

          $this->fieldConfig['class'] = ActiveField::className();

        }

        //這個就是輸出表單的開始標簽

        //如:<form id="login-form" action="/lulublog/frontend/web/index.php?r=site/login" method="post">

        echo Html::beginForm($this->action, $this->method, $this->options);

    }

    2、ActiveForm::end()方法

    //這個是在執(zhí)行 ActiveForm::end(); 中的end方法的時候調用的

    public function run()

    {

        //下面這個就是往視圖中注冊表單的js驗證腳本,

        if (!empty($this->attributes)) {

          $id = $this->options['id'];

          $options = Json::encode($this->getClientOptions());

          $attributes = Json::encode($this->attributes);

          $view = $this->getView();

          ActiveFormAsset::register($view);

          /*

           * $attributes:為要驗證的所有的field數(shù)組。它的值是在activeform中創(chuàng)建field的時候,在field的begin方法中給它賦值的。

           * 其中每個field又是一個數(shù)組,為這個field的各個參數(shù)

           * 比如username的field中的參數(shù)有

           * validate、id、name、

           * validateOnChange、validateOnType、validationDelay、

           * container、input、error

           * 

           * $options:為這個表單整體的屬性,如:

           * errorSummary、validateOnSubmit、

           * errorCssClass、successCssClass、validatingCssClass、

           * ajaxParam、ajaxDataType

           */

          $view->registerJs("jQuery('#$id').yiiActiveForm($attributes, $options);");

        }

        //輸出表單的結束標簽

        echo Html::endForm();

    }

    3、getClientOptions()方法

    /*

    * 設置表單的全局的一些樣式屬性以及js回調事件等

    */

    protected function getClientOptions()

    {

        $options = [

          'errorSummary' => '.' . $this->errorSummaryCssClass,

          'validateOnSubmit' => $this->validateOnSubmit,

          'errorCssClass' => $this->errorCssClass,

          'successCssClass' => $this->successCssClass,

          'validatingCssClass' => $this->validatingCssClass,

          'ajaxParam' => $this->ajaxParam,

          'ajaxDataType' => $this->ajaxDataType,

        ];

        if ($this->validationUrl !== null) {

          $options['validationUrl'] = Url::to($this->validationUrl);

        }

        foreach (['beforeSubmit', 'beforeValidate', 'afterValidate'] as $name) {

          if (($value = $this->$name) !== null) {

            $options[$name] = $value instanceof JsExpression ? $value : new JsExpression($value);

          }

        }

        return $options;

    }

    下面這個是生成的表單驗證Js代碼

    jQuery(document).ready(function () {

        jQuery('#login-form').yiiActiveForm(

        {

            "username":{

                "validate":function (attribute, value, messages) {

                    yii.validation.required(value, messages, {"message":"Username cannot be blank."});

                },

                "id":"loginform-username",

                "name":"username",

                "validateOnChange":true,

                "validateOnType":false,

                "validationDelay":200,

                "container":".field-loginform-username",

                "input":"#loginform-username",

                "error":".help-block"},

            "password":{

                "validate":function (attribute, value, messages) {

                    yii.validation.required(value, messages, {"message":"Password cannot be blank."});

                },

                "id":"loginform-password",

                "name":"password",

                "validateOnChange":true,

                "validateOnType":false,

                "validationDelay":200,

                "container":".field-loginform-password",

                "input":"#loginform-password",

                "error":".help-block"

                },

            "rememberMe":{

                "validate":function (attribute, value, messages) {

                    yii.validation.boolean(value, messages, {

                        "trueValue":"1","falseValue":"0","message":"Remember Me must be either \"1\" or \"0\".","skipOnEmpty":1});

                },

                "id":"loginform-rememberme",

                "name":"rememberMe","validateOnChange":true,

                "validateOnType":false,

                "validationDelay":200,

                "container":".field-loginform-rememberme",

                "input":"#loginform-rememberme",

                "error":".help-block"}

        }, 

        {

            "errorSummary":".error-summary",

            "validateOnSubmit":true,

            "errorCssClass":"has-error",

            "successCssClass":"has-success",

            "validatingCssClass":"validating",

            "ajaxParam":"ajax",

            "ajaxDataType":"json"

        });

    });

    4、其它方法:errorSummary、validate、validateMultiple

    public function errorSummary($models, $options = [])

    它主要就是把model中的所有的錯誤信息匯總到一個div中。

    public static function validate($model, $attributes = null)

    public static function validateMultiple($models, $attributes = null)

    這兩個是獲取錯誤信息的方法,比較簡單也不說了。

    3、表單中的參數(shù)

    1、表單form自身的屬性

    $action:設置當前表單提交的url地址,如果為空則是當前的url

    $method:提交方法,post或者get,默認為post

    $option:這個里面設置表單的其它的屬性,如id等,如果沒有設置id,將會自動生成一個以$autoIdPrefix為前綴的自動增加的id

    //這個方法在Widget基本中

    public function getId($autoGenerate = true)

    {

        if ($autoGenerate && $this->_id === null) {

          $this->_id = self::$autoIdPrefix . self::$counter++;

        }

        return $this->_id;

    }

    2、表單中各個項(field)輸入框相關的屬性

    Yii生成的每個field由4部分組成:

    ① 最外層div為每個field的容器,

    ② label為每個field的文本說明,

    ③ input為輸入元素,

    ④ 還有一個div為錯誤提示信息。

    <div class="form-group field-loginform-username required has-error">

        <label class="control-label" for="loginform-username">Username</label>

        <input type="text" id="loginform-username" class="form-control" name="LoginForm[username]">

        <div class="help-block">Username cannot be blank.</div>

    </div>

    $fieldConfig:這個是所有的field的統(tǒng)一的配置信息設置的屬性。也就是說在field類中的屬性都可以在這里進行設置。

    public function field($model, $attribute, $options = [])

    {

        //使用fieldConfig和options屬性來創(chuàng)建field

        //$options會覆蓋統(tǒng)一的fieldConfig屬性值,以實現(xiàn)每個field的自定義

        return Yii::createObject(array_merge($this->fieldConfig, $options, [

          'model' => $model,

          'attribute' => $attribute,

          'form' => $this,

    ]));

    }

    關于驗證的屬性:

    ① $enableClientValidation:是否在客戶端驗證,也即是否生成前端js驗證腳本(如果在form中設置了ajax驗證,也會生成這個js腳本)。

    ② $enableAjaxValidation:是否是ajax驗證

    ③ $validateOnChange:在輸入框失去焦點并且值改變的時候驗證

    ④ $validateOnType:正在輸入的時候就進行驗證

    ⑤ $validationDelay:驗證延遲的時間,單位為毫秒

    這5個屬性都可以在創(chuàng)建每個field的時候單獨設置,因為在field類中就有這5個屬性。

    關于每個field容器樣式的屬性:

    $requiredCssClass:必填項的樣式,默認為‘required'

    $errorCssClass:驗證錯誤的樣式,默認值為‘has-error'

    $successCssClass:驗證正確的樣式,默認值為‘has-success'

    $validatingCssClass:驗證過程中的樣式,默認值為‘validating'

    3、ajax驗證

    $validationUrl:ajax驗證的url地方

    $ajaxParam:url中的get參數(shù),用來標明當前是ajax請求,默認值為‘ajax'

    $ajaxDataType:ajax請求返回的數(shù)據(jù)格式

    4、前端js事件屬性

    $beforeSubmit:在提交表單之前事件,如果返回false,則不會提交表單,格式為:

    function ($form) {

     ...return false to cancel submission...

    }

    $beforeValidate:在每個屬性在驗證之前觸發(fā),格式為:

    function ($form, attribute, messages) {

     ...return false to cancel the validation...

    }

    $afterValidate:在每個屬性在驗證之后觸發(fā),格式為:

    function ($form, attribute, messages) {

    }

    5、表單中的其它屬性

    $validateOnSubmit:提交表單的時候進行驗證

    $errorSummary:總的錯誤提示地方的樣式

    $attributes:這個屬性比較特殊,它是在創(chuàng)建field的時候,在field中為這個form中的$attributes賦值的。這樣可以確保通過field方法生成的輸入表單都可以進行驗證

    希望本文所述對大家基于Yii框架的PHP程序設計有所幫助。

    更多信息請查看網(wǎng)絡編程
    易賢網(wǎng)手機網(wǎng)站地址:Yii2創(chuàng)建表單(ActiveForm)方法詳解

    2026上岸·考公考編培訓報班

    • 報班類型
    • 姓名
    • 手機號
    • 驗證碼
    關于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
    工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
    聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
    咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網(wǎng)