亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

Yii2創建表單(ActiveForm)方法詳解

2024-05-04 23:48:46
字體:
來源:轉載
供稿:網友

本文實例講述了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程序設計有所幫助。


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品中文字幕在线观看| 91精品免费久久久久久久久| 在线日韩日本国产亚洲| 国产亚洲欧美视频| 国产精品久久久久久久久久久久| 精品久久久国产精品999| 在线精品视频视频中文字幕| 日韩av资源在线播放| 国产亚洲欧美视频| 久久人体大胆视频| 成人www视频在线观看| 亚洲成人网在线| 中文字幕在线亚洲| 欧美黑人巨大精品一区二区| 爱福利视频一区| 91wwwcom在线观看| 欧美亚洲另类视频| 成人97在线观看视频| 国产精品一区久久| 国产精品av电影| 欧洲亚洲免费在线| 日本午夜在线亚洲.国产| 日韩av大片在线| 欧美性猛交xxxx乱大交蜜桃| 亚洲视频在线看| 欧美小视频在线观看| 国产精品视频成人| 午夜精品福利电影| 高清日韩电视剧大全免费播放在线观看| 69av在线视频| 91色在线观看| 国产精品99久久久久久白浆小说| 日本19禁啪啪免费观看www| 日韩高清免费在线| 日韩av理论片| 亚洲国产精彩中文乱码av在线播放| 国产精品爽爽ⅴa在线观看| 日韩视频免费在线观看| 狠狠躁夜夜躁人人躁婷婷91| 欧美亚洲成人精品| 久久69精品久久久久久国产越南| 成人a免费视频| 欧美日本在线视频中文字字幕| 欧美大片免费看| 日韩在线激情视频| 成人a在线观看| 91国产高清在线| 久久免费成人精品视频| 91亚洲精品久久久久久久久久久久| 一本色道久久综合狠狠躁篇怎么玩| 久久亚洲一区二区三区四区五区高| 国产美女精品免费电影| 最近2019中文字幕大全第二页| 亚洲成色999久久网站| 国产91免费观看| 国产亚洲精品久久久久久牛牛| 久久久免费在线观看| 亚洲日本中文字幕| 亚洲一品av免费观看| 久久亚洲精品小早川怜子66| 亚洲a∨日韩av高清在线观看| 美女撒尿一区二区三区| 欧美大尺度电影在线观看| 久久亚洲国产精品| 久久精品中文字幕电影| 亚洲一级一级97网| 成人在线小视频| 中文字幕日韩在线播放| 亚洲欧美日韩精品久久| 久久不射电影网| 国产91精品青草社区| 日韩欧美中文第一页| 日韩大陆欧美高清视频区| 国产精品视频自在线| 日韩在线播放视频| xvideos亚洲| 亚洲美女福利视频网站| 欧美性理论片在线观看片免费| 欧美日韩亚洲天堂| 国产丝袜一区二区三区免费视频| 亚洲成人久久久久| 欧美精品手机在线| 91久久精品一区| 国产在线视频一区| 亚洲色图欧美制服丝袜另类第一页| 国产精品第三页| 久久五月天色综合| 欧美成人免费va影院高清| 精品中文字幕久久久久久| 久久中文字幕一区| 成人福利免费观看| 欧美激情欧美狂野欧美精品| 福利一区视频在线观看| 亚洲欧美一区二区激情| 久久久女女女女999久久| 一夜七次郎国产精品亚洲| 最近中文字幕mv在线一区二区三区四区| 91亚洲国产成人精品性色| 国产精品女人久久久久久| 九九综合九九综合| 国产精品你懂得| 亚洲天堂影视av| 亚洲色图欧美制服丝袜另类第一页| 欧美日韩国产页| 久久精品亚洲精品| 国产亚洲精品久久久久久777| 国产精品一区电影| 精品国产一区久久久| 欧美国产欧美亚洲国产日韩mv天天看完整| 国产成人精品久久亚洲高清不卡| 国产精品69av| 亚洲女人天堂网| 中文字幕视频一区二区在线有码| 精品高清一区二区三区| 欧美日韩美女在线观看| 国产精品av免费在线观看| 亚洲国产精品国自产拍av秋霞| 亚洲电影免费在线观看| 国产一区二区丝袜高跟鞋图片| 91欧美精品午夜性色福利在线| 欧美国产乱视频| 亚洲曰本av电影| 91国产在线精品| 91po在线观看91精品国产性色| 国产精品国产三级国产专播精品人| 中文字幕欧美精品在线| 亚洲码在线观看| 亚洲天堂男人天堂女人天堂| 国产精品极品美女在线观看免费| 色伦专区97中文字幕| 亚洲欧美激情在线视频| 亚洲天堂av女优| 日韩av成人在线观看| 97久久久免费福利网址| 欧美另类老女人| 欧美精品久久一区二区| 亚洲欧美国产高清va在线播| 欧美激情极品视频| 国产精品老牛影院在线观看| 日本精品久久中文字幕佐佐木| 成人免费在线视频网址| 欧美资源在线观看| 中文字幕国产亚洲| 欧美一级淫片aaaaaaa视频| 亚洲精品中文字幕女同| 欧美风情在线观看| 欧美精品成人91久久久久久久| 成人春色激情网| 中文字幕日韩av综合精品| 国内精品久久久久影院 日本资源| 国产视频久久久久| 日韩一区av在线| 亚洲图片在区色| 国产精品视频成人| 青青在线视频一区二区三区| 国产在线日韩在线| 色狠狠av一区二区三区香蕉蜜桃| 91亚洲精品一区二区| 亚洲成人中文字幕| 久久免费视频观看| 亚洲欧美激情一区| 亚洲自拍偷拍在线| 日韩精品高清在线| 精品欧美aⅴ在线网站|