国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - PHP教程 - Yii2創(chuàng)建表單(ActiveForm)方法詳解

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

2021-02-18 16:22wjtlht928 PHP教程

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

本文實例講述了Yii2創(chuàng)建表單(ActiveForm)的方法。分享給大家供大家參考,具體如下:

由于表單涉及到一些驗證方面的信息,屬性設(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() ?>
  <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開始

?
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();
    }
    //這個就是輸出表單的開始標簽
    //如:<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é)束標簽
    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代碼

?
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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中的所有的錯誤信息匯總到一個div中。

?
1
2
public static function validate($model, $attributes = null)
public static function validateMultiple($models, $attributes = null)

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

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

1、表單form自身的屬性

$action:設(shè)置當前表單提交的url地址,如果為空則是當前的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部分組成:

① 最外層div為每個field的容器,
② label為每個field的文本說明,
③ input為輸入元素,
④ 還有一個div為錯誤提示信息。

?
1
2
3
4
5
<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的統(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'

3、ajax驗證

$validationUrl:ajax驗證的url地方
$ajaxParam:url中的get參數(shù),用來標明當前是ajax請求,默認值為‘ajax'
$ajaxDataType:ajax請求返回的數(shù)據(jù)格式

4、前端js事件屬性

$beforeSubmit:在提交表單之前事件,如果返回false,則不會提交表單,格式為:

?
1
2
3
function ($form) {
 ...return false to cancel submission...
}

$beforeValidate:在每個屬性在驗證之前觸發(fā),格式為:

?
1
2
3
function ($form, attribute, messages) {
 ...return false to cancel the validation...
}

$afterValidate:在每個屬性在驗證之后觸發(fā),格式為:

?
1
2
function ($form, attribute, messages) {
}

5、表單中的其它屬性

$validateOnSubmit:提交表單的時候進行驗證
$errorSummary:總的錯誤提示地方的樣式
$attributes:這個屬性比較特殊,它是在創(chuàng)建field的時候,在field中為這個form中的$attributes賦值的。這樣可以確保通過field方法生成的輸入表單都可以進行驗證

希望本文所述對大家基于Yii框架的PHP程序設(shè)計有所幫助。

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 久久久久久久久久久久久久免费看 | 免费精品视频 | 国内精品视频在线观看 | 欧美福利在线观看 | 亚洲九九| 三区在线 | 久久久精品蜜桃 | 一级黄色a毛片 | 久久成| 国产乱码精品一区二区三 | 免费看少妇高潮一级毛片特黄 | 国产欧美日韩综合精品一区二区 | 亚洲国产精品久久久 | 亚洲精品国产区欧美区在线 | 51ⅴ精品国产91久久久久久 | 日韩成人av在线 | 免费观看一区二区三区毛片软件 | 日韩在线不卡 | 亚洲欧美日韩在线一区 | 亚洲精品成人 | 96成人爽a毛片一区二区 | 精品亚洲一区二区三区四区五区 | 欧美精品一区二 | 亚洲成人精品一区 | 日日摸天天做天天添天天欢 | 欧美专区在线观看 | 国产精品一级大片 | 日韩精品久久久 | 欧美成在线观看 | 国产精品一区二区不卡 | 伊人电影综合网 | 成人一区二区在线 | 一个色综合色 | 成人国产精品免费观看 | 黄色一级网站 | 成人精品动漫一区二区三区 | 亚洲免费在线 | 国产二区视频 | 国产精品一区二区三区免费 | 欧美日韩在线观看一区二区 | 精品一区欧美 |