Ausführliche Erläuterung der Methode zur Erstellung eines Yii2-Formulars (ActiveForm).

高洛峰
Freigeben: 2023-03-05 13:32:01
Original
1819 Leute haben es durchsucht

Das Beispiel in diesem Artikel beschreibt die Methode zum Erstellen eines Formulars (ActiveForm) in Yii2. Geben Sie es zur Referenz an alle weiter. Die Details lauten wie folgt:

Da das Formular einige Verifizierungsinformationen enthält und die Attributeinstellungen zahlreich und komplex sind, hinterlassen Sie bitte eine Nachricht, wenn etwas nicht stimmt

Verzeichnis

Generierung des Formulars

Methoden im Formular
ActiveForm::begin()-Methode
ActiveForm::end()-Methode
getClientOptions() Methode
Andere Methoden: errorSummary, validieren, validierenMultiple

Parameter im Formular
Eigenschaften des Formulars selbst
Eigenschaften, die sich auf die Eingabefelder jedes Elements (Felds) im Formular beziehen
$fieldConfig
Über die Attribute der Validierung
Über die Attribute jedes Feldcontainerstils
Ajax-Validierung
Front-End-JS-Ereignisse
Andere Attribute im Formular

Lass uns Schauen Sie sich zunächst die einfachsten in Yii an. Lassen Sie uns zunächst ein intuitives Verständnis des Anmeldeformulars sowie des generierten HTML-Codes und der generierten Schnittstelle erhalten.

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

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

1. Formulargenerierung

In Yii ist das Formular sowohl ein ActiveForm als auch ein Widget, es beginnt mit begin In der Mitte befinden sich die Eingaben für jedes Elementfeld und am Ende endet es mit end

<?php $form = ActiveForm::begin([&#39;id&#39; => &#39;login-form&#39;]); ?>
Nach dem Login kopieren

2. Methoden in der Form

<?php ActiveForm::end(); ?>
Nach dem Login kopieren
In Widget ruft die begin()-Methode die int-Methode auf

am Ende Die end()-Methode ruft die Ausführungsmethode

public function init()
Nach dem Login kopieren

1 ActiveForm::begin()-Methode

public function run()
Nach dem Login kopieren

< auf 🎜>

//这个是在执行 $form = ActiveForm::begin([&#39;id&#39; => &#39;login-form&#39;]); 中的begin方法的时候调用的
public function init()
{
    //设置表单元素form的id
    if (!isset($this->options[&#39;id&#39;])) {
      $this->options[&#39;id&#39;] = $this->getId();
    }
    //设置表单中间的要生成各个field的所使用的类
    if (!isset($this->fieldConfig[&#39;class&#39;])) {
      $this->fieldConfig[&#39;class&#39;] = 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);
}
Nach dem Login kopieren

2. ActiveForm::end()-Methode


//这个是在执行 ActiveForm::end(); 中的end方法的时候调用的
public function run()
{
    //下面这个就是往视图中注册表单的js验证脚本,
    if (!empty($this->attributes)) {
      $id = $this->options[&#39;id&#39;];
      $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(&#39;#$id&#39;).yiiActiveForm($attributes, $options);");
    }
    //输出表单的结束标签
    echo Html::endForm();
}
Nach dem Login kopieren

3. getClientOptions ()-Methode


/*
* 设置表单的全局的一些样式属性以及js回调事件等
*/
protected function getClientOptions()
{
    $options = [
      &#39;errorSummary&#39; => &#39;.&#39; . $this->errorSummaryCssClass,
      &#39;validateOnSubmit&#39; => $this->validateOnSubmit,
      &#39;errorCssClass&#39; => $this->errorCssClass,
      &#39;successCssClass&#39; => $this->successCssClass,
      &#39;validatingCssClass&#39; => $this->validatingCssClass,
      &#39;ajaxParam&#39; => $this->ajaxParam,
      &#39;ajaxDataType&#39; => $this->ajaxDataType,
    ];
    if ($this->validationUrl !== null) {
      $options[&#39;validationUrl&#39;] = Url::to($this->validationUrl);
    }
    foreach ([&#39;beforeSubmit&#39;, &#39;beforeValidate&#39;, &#39;afterValidate&#39;] as $name) {
      if (($value = $this->$name) !== null) {
        $options[$name] = $value instanceof JsExpression ? $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(&#39;#login-form&#39;).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, validieren, validierenMultiple


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 vom aktuellen Formular übermittelte URL fest ist die aktuelle URL.

$method: Übermittlungsmethode, Post oder Get, Standard ist Post

$option: Legen Sie andere Attribute des Formulars fest, z. B. ID usw. Wenn die ID nicht festgelegt ist, wird sie automatisch festgelegt Generieren Sie ein Präfix mit $autoIdPrefix. Die automatisch hinzugefügte ID



//这个方法在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 Elements (Felds) im Formular beziehen


Jedes von Yii generierte Feld besteht aus 4 Teilen:

① Das äußerste Div ist der Container jedes Felds,

② label ist die Textbeschreibung jedes Felds,

③ input ist die Eingabeelement,

④ und A div ist die Fehlermeldung.




<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, [
      &#39;model&#39; => $model,
      &#39;attribute&#39; => $attribute,
      &#39;form&#39; => $this,
]));
}
Nach dem Login kopieren
Über die Attribute der Verifizierung:


① $enableClientValidation: Ob auf der Clientseite verifiziert werden soll, also ob eine Front generiert werden soll -end js-Überprüfungsskript (wenn im Formular die Ajax-Überprüfung festgelegt ist, wird dieses js-Skript ebenfalls generiert).

② $enableAjaxValidation: Ob es sich um eine Ajax-Validierung handelt

③ $validateOnChange: Validieren, wenn das Eingabefeld den Fokus verliert und sich der Wert ändert

④ $validateOnType: Validieren bei der Eingabe

⑤ $validationDelay: Überprüfungsverzögerungszeit , Einheit ist Millisekunden

Diese 5 Attribute können bei der Erstellung jedes Feldes individuell festgelegt werden, da diese 5 Attribute in der Feldklasse verfügbar sind.

Über die Attribute jedes Feldcontainerstils:

$requiredCssClass: der Stil der erforderlichen Elemente, der Standardwert ist „erforderlich“

$errorCssClass: der Stil der Überprüfungsfehler, der Standardwert Wert ist „has-error“

$successCssClass: Überprüfen Sie den korrekten Stil, der Standardwert ist „has-success“

$validatingCssClass: Der Stil während des Überprüfungsprozesses, der Standardwert ist „validating“


3, Ajax-Verifizierung

$validationUrl: URL-Speicherort für die Ajax-Verifizierung

$ajaxParam: Parameter in der URL abrufen, der angibt, dass die aktuelle Ajax-Anfrage vorliegt. Der Standardwert ist „Ajax“.

$ajaxDataType: Ajax-Anforderungsrückgabedatenformat

4. Front-End-JS-Ereignisattribut

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

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: Nach jedem Das Attribut wird nach der Überprüfung ausgelöst und das Format ist:


function ($form, attribute, messages) {
}
Nach dem Login kopieren
5. Andere Attribute im Formular


$validateOnSubmit: Beim Absenden des Formulars validieren

$errorSummary: Der Stil der allgemeinen Fehleraufforderungsstelle

$attributes: Dieses Attribut ist etwas ganz Besonderes. Es wird im Feld den $attributes zugewiesen Formular, wenn das Feld erstellt wird. Dadurch wird sichergestellt, dass das durch die Feldmethode generierte Eingabeformular überprüft werden kann.

Ich hoffe, dass dieser Artikel für alle auf dem Yii-Framework basierenden PHP-Programmdesigns hilfreich sein wird.

Ausführlichere Erläuterungen zu den Methoden zur Erstellung von Yii2-Formularen (ActiveForm) und verwandte Artikel finden Sie auf der chinesischen PHP-Website!

Verwandte Etiketten:
Quelle:php.cn
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