ajax) { $js = <<formId}', function(e) { e.preventDefault(); e.stopImmediatePropagation(); $.post( $(this).attr("action"), $(this).serialize(), {$this->successCallback}).fail({$this->errorCallback}); }); JS; $view->registerJs($js, View::POS_READY); } /** * @var ActiveForm $form */ $form = ActiveForm::begin( [ 'id' => $this->formId, 'action' => ($this->ajax) ? '/' . $this->id . '/save/ajax' : '/' . $this->id . '/save/no-ajax', 'class' => $this->classForm, ] ); $content = ''; foreach ($this->attributes as $field) { # если мы присвоили этому полю тип, то он его отрисовывает if (isset($this->inputOptions[$field]['type'])) { $function = $this->inputOptions[$field]['type']; $formStr = $form->field($this->model, $field) ->$function( isset($this->inputOptions[$field]['options']) ? $this->inputOptions[$field]['options'] : [] ); } # а если нет, то просто добавляет поле else { $formStr = $form->field($this->model, $field); } if (isset($this->labels[$field])) { $formStr->label(\Yii::t($this->locale, $this->labels[$field])); } if (isset($this->inputOptions[$field]['template'])) { $formStr = str_replace('{input}', $formStr, $this->inputOptions[$field]['template']); } $content .= $formStr; } $content .= $form->field($this->model, 'reCaptcha')->widget(\sashsvamir\yii2\recaptcha\ReCaptcha::className())->label(false); $content .= str_replace('{button}', Html::submitButton(\Yii::t($this->locale, $this->buttonContent), $this->buttonOptions), $this->buttonTemplate); $content = str_replace('{form}', $content, $this->templateForm); echo $content; ActiveForm::end(); } }