中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

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

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

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

目錄

表單的生成

表單中的方法

ActiveForm::begin()方法

ActiveForm::end()方法

getClientOptions()方法

其它方法:errorSummary、validate、validateMultiple

表單中的參數

表單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()方法

//這個是在執行 $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()方法

//這個是在執行 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數組。它的值是在activeform中創建field的時候,在field的begin方法中給它賦值的。

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

       * 比如username的field中的參數有

       * 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、表單中的參數

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的統一的配置信息設置的屬性。也就是說在field類中的屬性都可以在這里進行設置。

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

{

    //使用fieldConfig和options屬性來創建field

    //$options會覆蓋統一的fieldConfig屬性值,以實現每個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個屬性都可以在創建每個field的時候單獨設置,因為在field類中就有這5個屬性。

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

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

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

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

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

3、ajax驗證

$validationUrl:ajax驗證的url地方

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

$ajaxDataType:ajax請求返回的數據格式

4、前端js事件屬性

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

function ($form) {

 ...return false to cancel submission...

}

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

function ($form, attribute, messages) {

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

}

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

function ($form, attribute, messages) {

}

5、表單中的其它屬性

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

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

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

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

更多信息請查看網絡編程
易賢網手機網站地址:Yii2創建表單(ActiveForm)方法詳解
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

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

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
亚洲精品免费看| 欧美在线视频不卡| 欧美风情在线观看| 欧美亚洲日本网站| 在线亚洲美日韩| 日韩亚洲国产欧美| 亚洲精品久久久久久久久| 亚洲伦理网站| 亚洲美女黄网| 亚洲经典三级| 亚洲一区二区成人在线观看| 亚洲一区二区三区在线看| 一区二区三区偷拍| 欧美一区二区免费视频| 麻豆freexxxx性91精品| 久久婷婷麻豆| 国产精品久久久久久av福利软件| 国产精品青草综合久久久久99 | 亚洲精品一区二区三区福利| 韩国欧美一区| 国产精品99久久久久久宅男| 久久精品国产91精品亚洲| 欧美大片在线看| 在线国产亚洲欧美| 欧美专区在线观看| 国产精品一二一区| 亚洲一区久久久| 国产精品a久久久久| 一本高清dvd不卡在线观看| 麻豆91精品| 亚洲高清电影| 欧美xx视频| 日韩亚洲欧美一区| 欧美激情综合五月色丁香| 在线观看av不卡| 老司机67194精品线观看| 国产一区二区三区在线免费观看 | 狠狠久久亚洲欧美专区| 亚洲黄网站黄| 欧美午夜欧美| 亚洲伦理在线免费看| 欧美理论在线| 欧美一区二区三区视频在线| 国产日韩免费| 麻豆精品传媒视频| 亚洲一区二区伦理| 最近中文字幕日韩精品| 国产精品久久久一区二区三区| 欧美在线亚洲一区| 亚洲人成小说网站色在线| 国产精品美女视频网站| 欧美成人精品在线观看| 亚洲午夜在线观看视频在线| 国产精品久久久久久久7电影| 久久亚洲一区| 久久久免费精品| 午夜亚洲伦理| 亚洲天堂av高清| 亚洲伦理在线免费看| 亚洲电影免费在线观看| 国产一区二区在线观看免费| 欧美视频一区二区三区在线观看 | 亚洲欧美国产高清| 一区精品在线| 国产日韩在线不卡| 国内精品久久久久影院薰衣草| 欧美性大战久久久久久久蜜臀| 欧美成在线视频| 欧美激情一区三区| 欧美人体xx| 国产精品久久久久久久久久直播| 国产精品永久入口久久久| 国产欧亚日韩视频| 一区免费在线| 亚洲一区二区欧美| 久久久久久高潮国产精品视| 另类尿喷潮videofree| 欧美性生交xxxxx久久久| 国产日韩欧美不卡在线| 亚洲国产精品一区二区第一页| 亚洲电影在线播放| 久久久久久久久蜜桃| 一区二区视频在线观看| 激情六月婷婷综合| 亚洲精品小视频在线观看| 黑丝一区二区三区| 在线观看国产一区二区| 在线视频一区二区| av不卡在线| 久久精品国产一区二区电影| 国产亚洲精品一区二555| 亚洲福利视频一区| 亚洲特级毛片| 欧美色图麻豆| 亚洲国产精品成人综合色在线婷婷| 亚洲中无吗在线| 欧美性久久久| 亚洲国产毛片完整版 | 国产午夜亚洲精品理论片色戒| 亚洲美女中文字幕| 国产日韩精品一区二区浪潮av| 久久激情五月婷婷| 国内精品久久久久久久果冻传媒| 欧美亚洲免费电影| 韩日在线一区| 欧美大片免费久久精品三p| 亚洲精品一区二区三区樱花| 欧美激情一区二区三区四区| 在线一区二区视频| 国产婷婷色一区二区三区四区 | 久久午夜精品一区二区| 亚洲丶国产丶欧美一区二区三区| 久久全球大尺度高清视频| 亚洲精品欧美日韩专区| 国产精品久久久久久妇女6080 | 国产精品久久久99| 久久激情网站| 亚洲美女少妇无套啪啪呻吟| 国产精品第十页| 欧美专区福利在线| 在线一区亚洲| 亚洲国产精品99久久久久久久久| 国产精品mm| 久热综合在线亚洲精品| 午夜久久久久| 性色av一区二区三区红粉影视| 亚洲精品一二三区| 激情久久综艺| 国产自产高清不卡| 怡红院av一区二区三区| 国产综合自拍| 精品av久久久久电影| 国模大胆一区二区三区| 红桃视频国产精品| 国产亚洲欧美一区二区三区| 欧美四级伦理在线| 欧美视频日韩视频| 国产精品久久久久一区二区三区| 欧美激情成人在线| 欧美日产在线观看| 国产乱子伦一区二区三区国色天香| 欧美色一级片| 国产欧美日韩一区| 亚洲激情在线激情| 亚洲免费观看高清完整版在线观看熊 | 欧美日本在线一区| 欧美区高清在线| 国产一区二区观看| 亚洲视频精选| 亚洲桃色在线一区| 久色婷婷小香蕉久久| 欧美四级剧情无删版影片| 国产视频一区免费看| 日韩午夜av| 欧美91大片| 国产婷婷精品| 亚洲欧美成人在线| 欧美婷婷久久| 亚洲婷婷免费| 国产热re99久久6国产精品| 亚洲色诱最新| 欧美日韩一区二区视频在线观看| 夜夜嗨网站十八久久| 国产精品一区=区| 亚洲大胆美女视频| 久久福利精品| 国产精品美女主播| 亚洲国产精品一区在线观看不卡| 在线亚洲自拍| 欧美经典一区二区三区| 国内精品伊人久久久久av影院 | 国产日韩精品在线播放| 亚洲精品日韩一| 久久综合网络一区二区| 国产噜噜噜噜噜久久久久久久久 | 久久精品免费电影| 国产精品日韩在线播放| 一区二区三欧美| 国产精品白丝黑袜喷水久久久 | 一区二区三区国产精品| 欧美激情a∨在线视频播放| 亚洲片国产一区一级在线观看| 篠田优中文在线播放第一区| 欧美日韩中文字幕在线视频| 亚洲一区二区三区在线看| 国产精品日韩欧美一区二区三区 | 一区二区高清在线| 国产麻豆精品theporn| 麻豆91精品| 99精品热视频| 狠狠色狠色综合曰曰| 欧美日韩国产综合久久| 久久精品色图| 欧美亚洲一区二区三区| 亚洲日韩欧美视频| 国产乱子伦一区二区三区国色天香| 欧美高清在线观看| 久久在线播放| 久久综合色播五月| 久久久久国产精品人|