国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > 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教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 泾源县| 建宁县| 株洲县| 天镇县| 双鸭山市| 米泉市| 民勤县| 岳西县| 百色市| 临汾市| 响水县| 滨海县| 山东| 南宁市| 上饶县| 东乌珠穆沁旗| 双鸭山市| 平陆县| 庐江县| 峡江县| 乡城县| 饶阳县| 襄汾县| 贵德县| 马尔康县| 南郑县| 五莲县| 廊坊市| 宝兴县| 宁晋县| 沂源县| 闵行区| 沂源县| 齐河县| 云安县| 湛江市| 泰安市| 江城| 丹巴县| 罗城| 洛阳市|