av手机免费在线观看,国产女人在线视频,国产xxxx免费,捆绑调教一二三区,97影院最新理论片,色之久久综合,国产精品日韩欧美一区二区三区

php語(yǔ)言

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

時(shí)間:2025-01-12 19:08:11 php語(yǔ)言 我要投稿
  • 相關(guān)推薦

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

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

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

  目錄

  表單的生成

  表單中的方法

  ActiveForm::begin()方法

  ActiveForm::end()方法

  getClientOptions()方法

  其它方法:errorSummary、validate、validateMultiple

  表單中的參數(shù)

  表單form自身的屬性

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

  $fieldConfig

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

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

  ajax驗(yàn)證

  前端js事件

  表單中的其它屬性

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

  ?

  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開(kāi)始

  ?

  1

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

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

  ?

  1

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

  2、表單中的方法

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

  ?

  1

  public function init()

  在最后的end()方法會(huì)調(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

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

  public function init()

  {

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

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

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

  }

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

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

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

  }

  //這個(gè)就是輸出表單的開(kāi)始標(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

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

  public function run()

  {

  //下面這個(gè)就是往視圖中注冊(cè)表單的js驗(yàn)證腳本,

  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:為要驗(yàn)證的所有的field數(shù)組。它的值是在activeform中創(chuàng)建field的時(shí)候,在field的begin方法中給它賦值的。

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

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

  * validate、id、name、

  * validateOnChange、validateOnType、validationDelay、

  * container、input、error

  *

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

  * 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;

  }

  下面這個(gè)是生成的表單驗(yàn)證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中的所有的錯(cuò)誤信息匯總到一個(gè)p中。

  ?

  1

  2

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

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

  這兩個(gè)是獲取錯(cuò)誤信息的方法,比較簡(jiǎn)單也不說(shuō)了。

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

  1、表單form自身的屬性

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

  $method:提交方法,post或者get,默認(rèn)為post

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

  ?

  1

  2

  3

  4

  5

  6

  7

  8

  //這個(gè)方法在Widget基本中

  public function getId($autoGenerate = true)

  {

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

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

  }

  return $this->_id;

  }

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

  Yii生成的每個(gè)field由4部分組成:

  ① 最外層p為每個(gè)field的容器,

  ② label為每個(gè)field的文本說(shuō)明,

 、 input為輸入元素,

  ④ 還有一個(gè)p為錯(cuò)誤提示信息。

  ?

  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:這個(gè)是所有的field的統(tǒng)一的配置信息設(shè)置的屬性。也就是說(shuō)在field類中的屬性都可以在這里進(jìn)行設(shè)置。

  ?

  1

  2

  3

  4

  5

  6

  7

  8

  9

  10

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

  {

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

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

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

  'model' => $model,

  'attribute' => $attribute,

  'form' => $this,

  ]));

  }

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

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

 、 $enableAjaxValidation:是否是ajax驗(yàn)證

  ③ $validateOnChange:在輸入框失去焦點(diǎn)并且值改變的時(shí)候驗(yàn)證

  ④ $validateOnType:正在輸入的時(shí)候就進(jìn)行驗(yàn)證

 、 $validationDelay:驗(yàn)證延遲的時(shí)間,單位為毫秒

  這5個(gè)屬性都可以在創(chuàng)建每個(gè)field的時(shí)候單獨(dú)設(shè)置,因?yàn)樵趂ield類中就有這5個(gè)屬性。

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

  $requiredCssClass:必填項(xiàng)的樣式,默認(rèn)為‘required'

  $errorCssClass:驗(yàn)證錯(cuò)誤的樣式,默認(rèn)值為‘has-error'

  $successCssClass:驗(yàn)證正確的樣式,默認(rèn)值為‘has-success'

  $validatingCssClass:驗(yàn)證過(guò)程中的樣式,默認(rèn)值為‘validating'

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

PHP 表單驗(yàn)證方法11-01

常用表單驗(yàn)證的js方法11-12

PHP提交from表單的方法07-05

php防止表單重復(fù)提交的方法10-16

使用php自動(dòng)提交表單的方法11-16

php提交form表單處理方法07-12

用PHP提交from表單的處理方法09-06

ThinkPHP中create()方法自動(dòng)驗(yàn)證表單信息09-10

兩種實(shí)現(xiàn)表單驗(yàn)證的javascript方法09-19