Lab / YII

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