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(); ?>