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(['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(); ?>
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(['id' => 'login-form']); ?>
2. Methoden in der Form
<?php ActiveForm::end(); ?>
am Ende Die end()-Methode ruft die Ausführungsmethode
public function init()
1 ActiveForm::begin()-Methode
public function run()
< auf 🎜>
//这个是在执行 $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); }
//这个是在执行 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(); }
/* * 设置表单的全局的一些样式属性以及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; }
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" }); });
public function errorSummary($models, $options = [])
public static function validate($model, $attributes = null) public static function validateMultiple($models, $attributes = null)
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; }
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>
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: 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).
③ $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
$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... }
function ($form, attribute, messages) { ...return false to cancel the validation... }
function ($form, attribute, messages) { }
$validateOnSubmit: Beim Absenden des Formulars validieren
$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!