Программирование, веб-кодинг

Шпаргалка по формам ActiveForm для Yii2

Некоторые часто встречающиеся настройки для формы и полей формы в Yii2, горизонтальная форма в Yii2

Шпаргалка по формам ActiveForm для Yii2

Горизонтальная форма

Подключаете в виде, где форма ваша

use yii\bootstrap\ActiveForm;

Это круче, чем просто yii\widgets\ActiveForm, потому что дополняет её некоторыми полезными свойствами (такими как часто необходимый 'layout'). Например, можно сделать форму горизонтальной. Покажем пример

<?php $form = ActiveForm::begin([
        'layout'=>'horizontal',
        'options' => ['class' => 'signup-form form-register1'],
        'fieldConfig' => [
             'template' => "{label}\n{beginWrapper}\n{input}\n{hint}\n{error}\n{endWrapper}",
            'horizontalCssClasses' => [
                'label' => 'col-sm-4',
                'offset' => 'col-sm-offset-4',
                'wrapper' => 'col-sm-8',
                'error' => '',
                'hint' => '',
            ],
        ],
    ]); ?>
...

Здесь мы выводим лейблы справа от полей, назовём это горизонтальной формой. И дальше свойство 'fieldConfig' настроит шаблон (что и в каком порядке у полей выводить, какие отступы делать).


Возможность загрузки изображений в форме

Не забудьте в массиве options указать 'enctype' => 'multipart/form-data'

$form = ActiveForm::begin(['id' => 'blog-form', 'options' => ['enctype' => 'multipart/form-data']]);


Настройка отдельного поля

Можно прописать шаблон, применительно к отдельному полю, а не ко всем полям формы. Подсказку hint(). Подвесить к полю специфичный виджет, например, редактор Imperavi

<?= $form->field($model, 'text', ['template' => "{label}\n{hint}\n{input}\n{error}"])->hint('подсказка для поля text')->widget(Widget::classname(), [
                   'settings' => [
                        'lang' => 'ru',
                        'removeWithoutAttr' => [],
                        'minHeight' => 300,
                        'pastePlainText' => true,
                        'buttonSource' => true,
                        'replaceDivs' => false,
                        'plugins' => [
                            'clips',
                            'fullscreen',
                            'fontfamily',
                            'fontsize',
                            'fontcolor',
                            'video',
                            'table'
                        ],
                                'imageUpload' => Url::to(['/blog/image-upload']),
                                'imageManagerJson' => Url::to(['/blog/images-get']),
                                'fileManagerJson' => Url::to(['/blog/files-get']),
                                'fileUpload' => Url::to(['/blog/file-upload'])
                    ]
                ]);?>


Показ и непоказ названия поля (label). Плейсхолдеры (placeholder)

А вот в этом примере отключаю показ лейбла у полей, кроме поля 'message'. Задаю placeholder для полей типа инпут. Таким образом название поля переехало в само поле. Для поля message принудительно ставлю показ названия лейбла 'Ваши пожелания'

<?php $form = ActiveForm::begin([
                        'id' => 'contact-form',
                        'options' => ['class'=>'form2 form-register1'], 
                        'fieldConfig' => ['template' => "{label}\n{beginWrapper}\n{input}\n{hint}\n{error}\n{endWrapper}"]
                    ]); ?>
                        <?= $form->field($model, 'name', ['enableLabel' => false])->textInput(array('placeholder' => 'Ваше имя', 'class'=>'form-control text-center')); ?>
                        <?= $form->field($model, 'email', ['enableLabel' => false])->textInput(array('placeholder' => 'Ваше email', 'class'=>'form-control text-center')); ?>
                        <?= $form->field($model, 'phone', ['enableLabel' => false])->textInput(array('placeholder' => 'Номер Вашего телефона', 'class'=>'form-control text-center')); ?>
                        <?= $form->field($model, 'message', [
                            'template' => '{label}{input}{hint}{error}'
                        ])->textArea(['rows' => 6, 'enableLabel' => true])->label('Ваши пожелания'); ?>
                    
                    <div class="form-group">
                        <?= Html::submitButton('<img src="/images/send.png" />', ['class' => 'form2 button_zvon uppercase', 'name' => 'contact-button']) ?>
                    </div>
                    <?php ActiveForm::end(); ?>