Heim > Backend-Entwicklung > PHP-Tutorial > Detaillierte Erläuterung des Beispiels für die Yii2-Erstellungsform (ActiveForm) method_php

Detaillierte Erläuterung des Beispiels für die Yii2-Erstellungsform (ActiveForm) method_php

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Freigeben: 2016-08-04 08:56:44
Original
1003 Leute haben es durchsucht

Das Beispiel in diesem Artikel beschreibt die Methode zum Erstellen eines Formulars (ActiveForm) in Yii2. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

Da das Formular einige Verifizierungsinformationen enthält und viele und komplexe Attributeinstellungen aufweist, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen, wenn etwas nicht stimmt

Inhaltsverzeichnis

Formulargenerierung

Methoden im Formular
ActiveForm::begin()-Methode
ActiveForm::end()-Methode
getClientOptions()-Methode
Andere Methoden: errorSummary,validate,validateMultiple

Parameter im Formular
Die Eigenschaften des Formulars selbst
Attribute, die sich auf jedes Feldeingabefeld im Formular beziehen
$fieldConfig
Über die Attribute der Verifizierung
Über die Attribute jedes Feldcontainerstils
Ajax-Überprüfung
Front-End-JS-Ereignis
Andere Attribute im Formular

Werfen wir zunächst einen Blick auf das einfachste Anmeldeformular in Yii und den generierten HTML-Code und die Schnittstelle, um ein intuitives Verständnis zu erhalten

<&#63;php $form = ActiveForm::begin(['id' => 'login-form']); &#63;>
  <&#63;= $form->field($model, 'username') &#63;>
  <&#63;= $form->field($model, 'password')->passwordInput() &#63;>
  <&#63;= $form->field($model, 'rememberMe')->checkbox() &#63;>
  <div style="color:#999;margin:1em 0">
   If you forgot your password you can <&#63;= Html::a('reset it', ['site/request-password-reset']) &#63;>
  </div>
  <div class="form-group">
     <&#63;= Html::submitButton('Login', ['class' => 'btn btn-primary', 'name' => 'login-button']) &#63;>
  </div>
<&#63;php ActiveForm::end(); &#63;>

Nach dem Login kopieren

Das Folgende ist das generierte Formular-HTML, ich habe 5 Teile darin markiert.

1. Formularerstellung

In Yii ist ein Formular sowohl ein ActiveForm als auch ein Widget. Wie Sie oben sehen können, beginnt es mit begin

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

Nach dem Login kopieren

Die Mitte ist das Eingabefeld für jedes Element und endet mit end

<&#63;php ActiveForm::end(); &#63;>

Nach dem Login kopieren

2. Methoden in der Form

Die begin()-Methode in Widget ruft die int-Methode auf

public function init()

Nach dem Login kopieren

Die letzte end()-Methode ruft die run-Methode auf

public function run()

Nach dem Login kopieren

1. ActiveForm::begin()-Methode

//这个是在执行 $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&#63;r=site/login" method="post">
    echo Html::beginForm($this->action, $this->method, $this->options);
}

Nach dem Login kopieren

2. ActiveForm::end()-Methode

//这个是在执行 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();
}

Nach dem Login kopieren

3. getClientOptions()-Methode

/*
* 设置表单的全局的一些样式属性以及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 &#63; $value : new JsExpression($value);
      }
    }
    return $options;
}

Nach dem Login kopieren

Das Folgende ist der generierte Js-Code für die Formularüberprüfung

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

Nach dem Login kopieren

4. Andere Methoden: errorSummary,validate,validateMultiple

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

Nach dem Login kopieren

Es fasst hauptsächlich alle Fehlerinformationen im Modell in einem Div zusammen.

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

Nach dem Login kopieren

Diese beiden Methoden zum Erhalten von Fehlerinformationen sind relativ einfach und ich werde nicht auf Details eingehen.

3. Parameter im Formular

1. Attribute des Formulars selbst

$action: Legen Sie die URL-Adresse der aktuellen Formularübermittlung fest. Wenn sie leer ist, ist es die aktuelle URL
$method: Übermittlungsmethode, Post oder Get, Standard ist Post
$option: Dadurch werden andere Attribute des Formulars festgelegt, z. B. die ID usw. Wenn die ID nicht festgelegt ist, wird automatisch eine automatisch erhöhte ID mit dem Präfix $autoIdPrefix generiert

//这个方法在Widget基本中
public function getId($autoGenerate = true)
{
    if ($autoGenerate && $this->_id === null) {
      $this->_id = self::$autoIdPrefix . self::$counter++;
    }
    return $this->_id;
}

Nach dem Login kopieren

2. Attribute, die sich auf die Eingabefelder jedes Felds im Formular beziehen

Jedes von Yii generierte Feld besteht aus 4 Teilen:

① Das äußerste Div ist der Container jedes Felds,
② Beschriftung ist die Textbeschreibung jedes Felds,
③ Eingabe ist das Eingabeelement
④ Es gibt auch ein Div für Fehlermeldungen.

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

Nach dem Login kopieren

$fieldConfig: Dies ist das Attribut, das durch die einheitlichen Konfigurationsinformationen aller Felder festgelegt wird. Das heißt, hier können die Attribute im Feld Klasse gesetzt werden.

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,
]));
}

Nach dem Login kopieren

Über die Attribute der Verifizierung:

① $enableClientValidation: Ob auf der Clientseite überprüft werden soll, dh ob ein Front-End-JS-Überprüfungsskript generiert werden soll (wenn im Formular die Ajax-Überprüfung festgelegt ist, wird dieses JS-Skript ebenfalls generiert).
② $enableAjaxValidation: Ob es sich um eine Ajax-Verifizierung handelt
③ $validateOnChange: Validieren, wenn das Eingabefeld den Fokus verliert und sich der Wert ändert
④ $validateOnType: Validieren während der Eingabe von
⑤ $validationDelay: Validierungsverzögerungszeit, Einheit ist Millisekunden

Diese fünf Attribute können beim Erstellen jedes Feldes individuell festgelegt werden, da diese fünf Attribute in der Feldklasse vorhanden sind.

Über die Attribute jedes Feldcontainerstils:

$requiredCssClass: Stil der erforderlichen Elemente, Standard ist „erforderlich“
$errorCssClass: Überprüfungsfehlerstil, Standardwert ist „has-error“
$successCssClass: Überprüfen Sie den richtigen Stil. Der Standardwert ist „has-success“
$validatingCssClass: Stil während des Validierungsprozesses, der Standardwert ist „validating“

3. Ajax-Überprüfung

$validationUrl: URL für die Ajax-Verifizierung
$ajaxParam: Der get-Parameter in der URL wird verwendet, um anzugeben, dass es sich bei der aktuellen Anfrage um eine Ajax-Anfrage handelt. Der Standardwert ist „ajax“
$ajaxDataType: Von der Ajax-Anfrage zurückgegebenes Datenformat

4. Front-End-JS-Ereignisattribute

$beforeSubmit: Ereignis vor dem Absenden des Formulars. Wenn false zurückgegeben wird, wird das Formular nicht gesendet. Das Format ist:

function ($form) {
 ...return false to cancel submission...
}

Nach dem Login kopieren

$beforeValidate: Wird ausgelöst, bevor jedes Attribut validiert wird. Das Format lautet:

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

Nach dem Login kopieren

$afterValidate:在每个属性在验证之后触发,格式为:

function ($form, attribute, messages) {
}

Nach dem Login kopieren

5、表单中的其它属性

$validateOnSubmit:提交表单的时候进行验证
$errorSummary:总的错误提示地方的样式
$attributes:这个属性比较特殊,它是在创建field的时候,在field中为这个form中的$attributes赋值的。这样可以确保通过field方法生成的输入表单都可以进行验证

更多关于Yii相关内容感兴趣的读者可查看本站专题:《Yii框架入门及常用技巧总结》、《php优秀开发框架总结》、《smarty模板入门基础教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

Verwandte Etiketten:
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage