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

Aug 04, 2016 am 08:56 AM
yii2

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程序设计有所帮助。

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Apr 05, 2025 am 12:04 AM

JWT ist ein offener Standard, der auf JSON basiert und zur sicheren Übertragung von Informationen zwischen Parteien verwendet wird, hauptsächlich für die Identitätsauthentifizierung und den Informationsaustausch. 1. JWT besteht aus drei Teilen: Header, Nutzlast und Signatur. 2. Das Arbeitsprinzip von JWT enthält drei Schritte: Generierung von JWT, Überprüfung von JWT und Parsingnayload. 3. Bei Verwendung von JWT zur Authentifizierung in PHP kann JWT generiert und überprüft werden, und die Funktionen und Berechtigungsinformationen der Benutzer können in die erweiterte Verwendung aufgenommen werden. 4. Häufige Fehler sind Signaturüberprüfungsfehler, Token -Ablauf und übergroße Nutzlast. Zu Debugging -Fähigkeiten gehört die Verwendung von Debugging -Tools und Protokollierung. 5. Leistungsoptimierung und Best Practices umfassen die Verwendung geeigneter Signaturalgorithmen, das Einstellen von Gültigkeitsperioden angemessen.

Wie funktioniert die Session -Entführung und wie können Sie es in PHP mildern? Wie funktioniert die Session -Entführung und wie können Sie es in PHP mildern? Apr 06, 2025 am 12:02 AM

Die Hijacking der Sitzung kann in den folgenden Schritten erreicht werden: 1. Erhalten Sie die Sitzungs -ID, 2. Verwenden Sie die Sitzungs -ID, 3. Halten Sie die Sitzung aktiv. Zu den Methoden zur Verhinderung der Sitzung der Sitzung in PHP gehören: 1. Verwenden Sie die Funktion Session_regenerate_id (), um die Sitzungs -ID zu regenerieren. 2. Store -Sitzungsdaten über die Datenbank, 3. Stellen Sie sicher, dass alle Sitzungsdaten über HTTPS übertragen werden.

Beschreiben Sie die soliden Prinzipien und wie sie sich für die PHP -Entwicklung anwenden. Beschreiben Sie die soliden Prinzipien und wie sie sich für die PHP -Entwicklung anwenden. Apr 03, 2025 am 12:04 AM

Die Anwendung des soliden Prinzips in der PHP -Entwicklung umfasst: 1. Prinzip der Einzelverantwortung (SRP): Jede Klasse ist nur für eine Funktion verantwortlich. 2. Open and Close Principle (OCP): Änderungen werden eher durch Erweiterung als durch Modifikation erreicht. 3.. Lischs Substitutionsprinzip (LSP): Unterklassen können Basisklassen ersetzen, ohne die Programmgenauigkeit zu beeinträchtigen. 4. Schnittstellen-Isolationsprinzip (ISP): Verwenden Sie feinkörnige Schnittstellen, um Abhängigkeiten und nicht verwendete Methoden zu vermeiden. 5. Abhängigkeitsinversionsprinzip (DIP): Hoch- und niedrige Module beruhen auf der Abstraktion und werden durch Abhängigkeitsinjektion implementiert.

Wie setze ich nach dem Neustart des Systems automatisch Berechtigungen von Unixsocket fest? Wie setze ich nach dem Neustart des Systems automatisch Berechtigungen von Unixsocket fest? Mar 31, 2025 pm 11:54 PM

So setzen Sie die Berechtigungen von Unixsocket automatisch nach dem Neustart des Systems. Jedes Mal, wenn das System neu startet, müssen wir den folgenden Befehl ausführen, um die Berechtigungen von Unixsocket: sudo ...

Wie debugge ich den CLI -Modus in PhpStorm? Wie debugge ich den CLI -Modus in PhpStorm? Apr 01, 2025 pm 02:57 PM

Wie debugge ich den CLI -Modus in PhpStorm? Bei der Entwicklung mit PHPSTORM müssen wir manchmal den PHP im CLI -Modus (COMS -Zeilenschnittstellen) debuggen ...

Erklären Sie die späte statische Bindung in PHP (statisch: :). Erklären Sie die späte statische Bindung in PHP (statisch: :). Apr 03, 2025 am 12:04 AM

Statische Bindung (statisch: :) implementiert die späte statische Bindung (LSB) in PHP, sodass das Aufrufen von Klassen in statischen Kontexten anstatt Klassen zu definieren. 1) Der Analyseprozess wird zur Laufzeit durchgeführt.

Wie sende ich eine Postanforderung mit JSON -Daten mithilfe der Curl -Bibliothek von PHP? Wie sende ich eine Postanforderung mit JSON -Daten mithilfe der Curl -Bibliothek von PHP? Apr 01, 2025 pm 03:12 PM

Senden von JSON -Daten mithilfe der Curl -Bibliothek von PHP in der PHP -Entwicklung müssen häufig mit externen APIs interagieren. Eine der gängigen Möglichkeiten besteht darin, die Curl Library zu verwenden, um Post � ...

See all articles