Бортовой журнал Ктулху

Пример создания формы с помощью ActiveForm

Active Form на Yii2 используется для создания форм, как ни странно. Приведу самый простой пример, достаточный для понимания как создавать формы при помощи этого компонента.

Код вызова формы

$model = new TablenameModel(); - это объект формы.
$form - объект формы.

Этот код вставляем в шаблон: 

// инициализация формы
$form = ActiveForm::begin(
[
'id' => 'edit-attribute',
'enableClientValidation' => true,
'enableAjaxValidation' => false, 
'validateOnSubmit' => true,
'validateOnChange' => false,
'options' =>[
    'autocomplete'=>'off',
    'method' => 'POST',
    'enctype'=>'multipart/form-data',
    'class' => 'form-group',
],
]
);
// поля формы
echo $form->errorSummary($model);  // нужно для валидации
echo $form->field($model, 'Name');
echo Html::submitButton('Сохранить', ['class' => 'btn btn-default']);
echo Html::resetButton('Отмена', ['class' => 'btn btn-default','data-dismiss' => 'modal']);
// конец формы
ActiveForm::end();

 

Параметры формы

Основные параметры:

enableClientValidation: true/false - включить или выключить валидацию.

enableAjaxValidation - валидация на стороне сервера. На сервер будут отправляться поля формы и возвращаться ответ об успешности или неуспешности валидируемого значения.

validateOnSubmit - валидация будет происходить при отправке формы.

validateOnChange - при изменении поля.

autocomplete - включение или отключение автозаполнения полей.

method - POST или GET.

class - css класс формы.

action - экшен формы.

Валидация

Валидация Active Form на основе модели. Это не так уж и плохо, даже удобно.

Если в модели не будет правил валидации, в форме она просто не будет работать.

В модели сделать примерно так для указания обязательности полей.

return [
 ['id', 'integer'],
[['Value', 'Descr'], 'required'],
 ['Value', 'string', 'max' => 240],
 ['Descr', 'string', 'max' => 240],
 ];

Это правила валидации в модели, и в них указано что поля Value и Descr обязательны, они являются строками длиной до 240 символов.

screenshot 2017 11 03 17 14 27 1

Можно немного усложнить и добавить полю Value условие - только латинские символы.

return [
 ['id', 'integer'],
 ['TemailID', 'integer'],
 [['Field', 'Value', 'Descr'], 'required'],
 [
 'Value',
 'match', 'not' => true, 'pattern' => '/[^a-zA-Z_-]/',
 'message' => 'Только латинские символы',
 ],
 ['Value', 'string', 'max' => 240],
 ['Descr', 'string', 'max' => 240],
 ];

screenshot 2017 11 03 17 18 56 1

Как видно, валидация не пропускает спецсимволы и прочие нелатинские буквы.