Yii2: поля ActiveForm

Yii2: поля ActiveFormНаверняка, одними из самых часто используемых вами yii2 виджетов станут yii\widgets\ActiveForm и его улучшенная Bootstrap 3 версия — yii\bootstrap\ActiveForm.

Сегодня рассмотрим использование yii\bootstrap\ActiveForm  в деталях. Наглядным примером послужит демонстрация и исходные коды (модуль simpleactiveform).

Импорт нужных классов

Первым делом укажем, где искать используемые классы ActiveForm и Html.

Инициализация формы в представлении

Начало формы реализует метод begin() . В массиве передаем настройки формы, html идентификатор и класс, а так же 'enctype' => 'multipart/form-data', для возможности загрузки файлов.

Ввод текста

Простое текстовое поле

Для вывода простого текстового поля достаточно выполнить  $form->field($model,'name');. В примере показано, как указать всплывающую подсказку и имя поля.

Многострочное текстовое поле

Пример вывода textarea с параметрами и заголовком.

Ввод пароля

Введенные символы будут скрыты звездочками. Два варианта.

Поле ввода email

В ногу с html5, можно использовать специальное поле для ввода адреса электронной почты.

Загрузка файлов

Метод  fileInput() используется для загрузки файлов. Параметр  'multiple' позволяет включить загрузку нескольких файлов одновременно.

Одиночная загрузка

Загрузка нескольких файлов сразу

Чекбоксы

Вывод полей чекбокс осуществляется при помощи методов checkbox() и checkboxList().

Одиночный чекбокс

Вывод неактивного чекбокса с указанием заголовка и css стиля.

Группа чекбоксов

Радио кнопки

Одиночная радио кнопка

Группа радио кнопок

Список

Простой список с возможностью выбора нескольких вариантов.

Выпадающий список

Вывод выпадающего списка с возможностью выбора только одного варианта.

Кнопка отправки формы

Классический элемент submit для отправки содержимого формы.

Заключение

Встроенный yii2 виджет ActiveForm перекрывает 90% потребностей программиста при создании пользовательского интерфейса в части html форм. При необходимости можно самостоятельно расширить этот класс или попытаться найти решения в сообществе.

Yii2: поля ActiveForm: 9 комментариев

  1. Спасибо, супер.
    как добавить свой id для каждого поля? yii ведь сам генерирует.
    С удавольствием поддержу проект!!!

    1. $form->field() принимает третьим параметром массив с настройками. Где при помощи ‘inputOptions’ можно настроить параметры тега input.
      Пример:
      $form->field($model, ’email’, [
      ‘inputOptions’ => [
      ‘id’ => ‘my-email-input-id’,
      ],
      ])->input(’email’);

    1. кодировку устанавливаем:
      1. В настройках веб-сервера;
      2. В layout, при помощи тега ;
      3. Все файлы, в том числе *.php, сохраняем в кодировке «UTF-8 без БОМ».

  2. Здравствуйте! Вот везде вижу ‘id’ => ‘form-input-example’,
    А где этот айди потом высплывает? В Yii::$app->request->post() его почему-то нет! Зачем он и где его достать?

    1. Это установка атрибута id формы:

      Можно не указывать, если нет необходимости в нём, в таком случае виджет сгенерирует его автоматически.

  3. А не подскажите в чём может быть проблема??
    Необходимо вместе с 3-мя текстовыми полями загрузить картинку-эмблемку. В виде, в форме:
    field($model, ‘team_league’)->dropDownList([‘1’ => ‘Испания’, ‘2’ => ‘Англия’, ‘3’ => ‘Германия’]) ?>
    field($model, ‘team_name’)->textInput([‘maxlength’ => true]) ?>
    field($model, ‘team_embl’)->fileInput() ?>
    field($model, ‘team_stadium’)->textInput([‘maxlength’ => true]) ?>
    isNewRecord ? ‘Добавить’ : ‘Обновить’, [‘class’ => $model->isNewRecord ? ‘btn btn-danger’ : ‘btn btn-primary’]) ?>
    В контроллере:
    public function actionCreate()
    {
    $model = new Team();
    $modelFile = new UploadForm();
    if (Yii::$app->request->isPost) {
    $modelFile->team_embl = UploadedFile::getInstance($model, ‘team_embl’);
    if ($modelFile->team_embl && $modelFile->validate()) {
    $modelFile->team_embl->saveAs(‘img/embl/’ . $modelFile->team_embl->baseName . ‘.’ . $modelFile->team_embl->extension);
    $model->team_embl = ‘/img/embl/’ . $modelFile->team_embl->baseName . ‘.’ . $modelFile->team_embl->extension;
    }
    }
    if ($model->load(Yii::$app->request->post()) && $model->save()) {
    return $this->redirect([‘view’, ‘id’ => $model->team_id]);
    } else {
    return $this->render(‘create’, [
    ‘model’ => $model,
    ‘modelFile’ => $modelFile,
    ]);
    }
    }
    Но всё равно В массиве $_POST:
    [ ‘team_league’ => ‘3’
    ‘team_name’ => ‘Айнтрахт’
    ‘team_embl’ => »
    ‘team_stadium’ => ‘Стадион’ ]
    Уже просто отчаялся — что только не пробовал! Ставить отдельное расшерение для этого совсем не хочется

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *