Yii2: Шпаргалки по работе с формами

Здесь я постараюсь опубликовать некоторые заметки связанные с механизмом ActiveForms в Yii2

Задаём кастомное сообщение при валидации:

[['name', 'email'], 'required', 'message' => 'Обязательно для заполнения'],
['email', 'email', 'message' => 'Не корректный e-mail'],

В первом случае для всех полей с меткой required будет отображаться сообщение о необходимости заполнить поле, а для второго метода e-mail будет выдано сообщение о некорректности формата e-mail адреса.

Валидация загружаемых файлов:

[['imageFile'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg'],

Фильтрация данных получаемых через поля формы

В Yii2 встроен прекрасный механизм фильтрации данных получаемых от пользователя. Для того что бы очистить поля полученные от формы для начала в контроллере подключим Html хелпер:

use yii\helpers\Html;

Затем обернём в этот хелпер приходящие в POST запросе данные:

if($form->load(Yii::$app->request->post()) && $form->validate()) // если произошла отправка фориы и валидация успешна
{
  $name = Html::encode($form->name);
  $email = Html::encode($form->email); // очищаем строку

Условие если переменная или элемент массива содержит данные (не пусто):

<?php if ($item->logo): ?>
   //.. code
<?php endif; ?>

Виджеты полей

Для вывода поля в виде массива с чекбоксами:

<?php echo $form->field($model, 'name[]')->checkboxList(['a' => 'Item A', 'b' => 'Item B', 'c' => 'Item C']); ?>

То-же самое, только заменим чекбоксы на радио кнопки:

<?= $form->field($model, 'population')->radioList(array('1'=>'One',2=>'Two')); ?>

Выпадающий список значение, в первом случае мы зададим доступные элементы вручную, во втором получим массив например из связанной модели.

//Ручное указание элементов
<?php echo $form->field($model, 'name')->dropDownList(['a' => 'Item A', 'b' => 'Item B', 'c' => 'Item C']); ?>
//Массив элементов и задание пустого значения
< echo $form->field($model, 'name')->dropDownList($listData, ['prompt'=>'Choose...']);>

Выпадающий список с группировкой значений:

<?php
    $form = ActiveForm::begin();
    $items = [
        'Активный' => [
            '0' => 'Админ',
            '1' => 'Модератор',
            '2' => 'Пользователь',
        ],
        'Отключен' => [
            '3' => 'За нарушения',
            '4' => 'Самостоятельно',
        ],
        'Удален' => [
            '5' => 'Админом',
            '6' => 'Самостоятельно',
        ],
    ];
    $params = [
        'prompt' => 'Выберите статус...',
    ];
    echo $form->field($model, 'status')->dropDownList($items,$params);
    ActiveForm::end();
?>

Параметры, класс и ID формы:

<?php
use yii\helpers\Html;
use yii\widgets\ActiveForm;
//$form = ActiveForm::begin(); //Default Active Form begin
$form = ActiveForm::begin([
    'id' => 'active-form',
    'options' => [
                'class' => 'form-horizontal',
                'enctype' => 'multipart/form-data'
                ],
])
/* ADD FORM FIELDS */
ActiveForm::end();
?>