<delect id="sj01t"></delect>
  1. <em id="sj01t"><label id="sj01t"></label></em>
  2. <div id="sj01t"></div>
    1. <em id="sj01t"></em>

            <div id="sj01t"></div>
            php語言

            Yii2創建表單(ActiveForm)方法

            時間:2025-01-12 19:08:11 php語言 我要投稿
            • 相關推薦

            Yii2創建表單(ActiveForm)方法

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

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

              目錄

              表單的生成

              表單中的方法

              ActiveForm::begin()方法

              ActiveForm::end()方法

              getClientOptions()方法

              其它方法:errorSummary、validate、validateMultiple

              表單中的參數

              表單form自身的屬性

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

              $fieldConfig

              關于驗證的屬性

              關于每個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,我在里面標明了5部分。

              1、表單的生成

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

              ?

              1

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

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

              ?

              1

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

              2、表單中的方法

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

              ?

              1

              public function init()

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

              ?

              1

              public function run()

              1、ActiveForm::begin()方法

              ?

              1

              2

              3

              4

              5

              6

              7

              8

              9

              10

              11

              12

              13

              14

              15

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

              ?

              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

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

              ?

              1

              2

              3

              4

              5

              6

              7

              8

              9

              10

              11

              12

              13

              14

              15

              16

              17

              18

              19

              20

              21

              22

              23

              24

              /*

              * 設置表單的全局的一些樣式屬性以及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

              ?

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

              1、表單form自身的屬性

              $action:設置當前表單提交的url地址,如果為空則是當前的url

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

              $option:這個里面設置表單的其它的屬性,如id等,如果沒有設置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)輸入框相關的屬性

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

              ?

              1

              2

              3

              4

              5

              6

              7

              8

              9

              10

              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'

            【Yii2創建表單(ActiveForm)方法】相關文章:

            PHP 表單驗證方法11-01

            常用表單驗證的js方法11-12

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

            php防止表單重復提交的方法10-16

            使用php自動提交表單的方法11-16

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

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

            ThinkPHP中create()方法自動驗證表單信息09-10

            兩種實現表單驗證的javascript方法09-19

            <delect id="sj01t"></delect>
            1. <em id="sj01t"><label id="sj01t"></label></em>
            2. <div id="sj01t"></div>
              1. <em id="sj01t"></em>

                      <div id="sj01t"></div>
                      黄色视频在线观看