亚洲精品中文字幕无乱码_久久亚洲精品无码AV大片_最新国产免费Av网址_国产精品3级片

php語言

Yii2創(chuàng)建表單(ActiveForm)方法

時間:2022-11-17 06:16:20 php語言 我要投稿
  • 相關(guān)推薦

Yii2創(chuàng)建表單(ActiveForm)方法

  Yii2創(chuàng)建表單(ActiveForm)的方法,結(jié)合實例形式詳細分析了Yii創(chuàng)建表單的詳細步驟及相關(guān)函數(shù)與屬性的使用技巧,需要的朋友可以參考下.

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

  目錄

  表單的生成

  表單中的方法

  ActiveForm::begin()方法

  ActiveForm::end()方法

  getClientOptions()方法

  其它方法:errorSummary、validate、validateMultiple

  表單中的參數(shù)

  表單form自身的屬性

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

  $fieldConfig

  關(guān)于驗證的屬性

  關(guān)于每個field容器樣式的屬性

  ajax驗證

  前端js事件

  表單中的其它屬性

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

  ?

  1

  2

  3

  4

  5

  6

  7

  8

  9

  10

  11

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

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

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

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

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

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

  </p>

  <p class="form-group">

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

  </p>

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

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

  1、表單的生成

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

  ?

  1

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

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

  ?

  1

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

  2、表單中的方法

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

  ?

  1

  public function init()

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

  ?

  1

  public function run()

  1、ActiveForm::begin()方法

  ?

  1

  2

  3

  4

  5

  6

  7

  8

  9

  10

  11

  12

  13

  14

  15

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

  public function init()

  {

  //設(shè)置表單元素form的id

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

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

  }

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

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

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

  }

  //這個就是輸出表單的開始標(biāo)簽

  //如:<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()方法

  ?

  1

  2

  3

  4

  5

  6

  7

  8

  9

  10

  11

  12

  13

  14

  15

  16

  17

  18

  19

  20

  21

  22

  23

  24

  25

  26

  27

  28

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

  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);");

  }

  //輸出表單的結(jié)束標(biāo)簽

  echo Html::endForm();

  }

  3、getClientOptions()方法

  ?

  1

  2

  3

  4

  5

  6

  7

  8

  9

  10

  11

  12

  13

  14

  15

  16

  17

  18

  19

  20

  21

  22

  23

  24

  /*

  * 設(shè)置表單的全局的一些樣式屬性以及js回調(diào)事件等

  */

  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

  ?

  1

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

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

  ?

  1

  2

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

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

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

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

  1、表單form自身的屬性

  $action:設(shè)置當(dāng)前表單提交的url地址,如果為空則是當(dāng)前的url

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

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

  ?

  1

  2

  3

  4

  5

  6

  7

  8

  //這個方法在Widget基本中

  public function getId($autoGenerate = true)

  {

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

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

  }

  return $this->_id;

  }

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

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

 、 最外層p為每個field的容器,

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

 、 input為輸入元素,

 、 還有一個p為錯誤提示信息。

  ?

  1

  2

  3

  4

  5

  <p 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]">

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

  </p>

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

  ?

  1

  2

  3

  4

  5

  6

  7

  8

  9

  10

  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,

  ]));

  }

  關(guān)于驗證的屬性:

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

 、 $enableAjaxValidation:是否是ajax驗證

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

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

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

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

  關(guān)于每個field容器樣式的屬性:

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

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

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

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

【Yii2創(chuàng)建表單(ActiveForm)方法】相關(guān)文章:

Dreamweaver用屬性面板創(chuàng)建鏈接的方法12-23

職稱計算機Dreamwaver教程:認識表單對象05-16

績效的改進方法12-08

綠色學(xué)校創(chuàng)建教案(通用5篇)10-20

小學(xué)創(chuàng)建綠色校園教案(精選12篇)12-08

ps黑白的色調(diào)的方法11-12

photoshop的使用方法12-09

科目一的考試方法10-27

日語學(xué)習(xí)的入門方法04-10

網(wǎng)速的計算方法06-17