Виджет ActiveForm — Yii2

Рассмотрим часто использующийся при разработке виджет ActiveForm. Виджет позволяет добавить на сайт форму с полями ввода, кнопками, списками выбора, чекбоксами, радио кнопками. Для создания формы подключаем в шаблоне следующие классы:

// подключаем помощник html разметки
use yii\helpers\Html;
// подключаем виджет для работы с формами
use yii\widgets\ActiveForm;
// для добавления captcha
use yii\captcha\Captcha;
// вместо yii\widgets\ActiveForm можно использовать версию под
// bootstrap 3, которая предоставляет дополнительные возможности
use yii\bootstrap\ActiveForm;

Инициализация формы

$form = ActiveForm::begin([
    // идентификатор формы
    'id' => 'feedback-form',
    'options' => [
        // класс формы
        'class' => 'form-horizontal',
        // возможность загрузки файлов
        'enctype' => 'multipart/form-data'
     ]
]);
/* Сюда добавляем поля формы */
ActiveForm::end();
<form id="feedback-form" class="form-horizontal" action="/web/index.php?r=page%2Ffeedback" method="post">
    <input type="hidden" name="_csrf" value=".....">
</form>

Текстовое поле

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

echo $form->field($model,'name'); 
<form id="feedback-form" class="form-horizontal" action="/web/index.php?r=page%2Ffeedback" method="post">
    <input type="hidden" name="_csrf" value=".....">
    <div class="form-group field-feedbackform-name">
        <label class="control-label" for="feedbackform-name">Name</label>
        <input type="text" id="feedbackform-name" class="form-control" name="FeedbackForm[name]">
        <div class="help-block"></div>
    </div>
</form>

Текстовое поле с подсказкой и описанием

echo $form->field($model, 'name')->textInput()->hint('Введите имя')->label('Имя');
<form id="feedback-form" class="form-horizontal" action="/web/index.php?r=page%2Ffeedback" method="post">
    <input type="hidden" name="_csrf" value=".....">
    <div class="form-group field-feedbackform-name">
        <label class="control-label" for="feedbackform-name">Имя</label>
        <input type="text" id="feedbackform-name" class="form-control" name="FeedbackForm[name]">
        <div class="hint-block">Введите имя</div>
        <div class="help-block"></div>
    </div>
</form>

Текстовое поле для e-mail

Простое поле для e-mail

echo $form->field($model, 'email')->input('email');
<form id="feedback-form" class="form-horizontal" action="/web/index.php?r=page%2Ffeedback" method="post">
    <input type="hidden" name="_csrf" value=".....">
    <div class="form-group field-feedbackform-email">
        <label class="control-label" for="feedbackform-email">Email</label>
        <input type="email" id="feedbackform-email" class="form-control" name="FeedbackForm[email]">
        <div class="help-block"></div>
    </div>
</form>

Поле с подсказкой и описанием

echo $form->field($model, 'email')->input('email')->hint('Введите адрес почты')->label('Электронный адрес');
<form id="feedback-form" class="form-horizontal" action="/web/index.php?r=page%2Ffeedback" method="post">
    <input type="hidden" name="_csrf" value=".....">
    <div class="form-group field-feedbackform-email">
        <label class="control-label" for="feedbackform-email">Электронный адрес</label>
        <input type="email" id="feedbackform-email" class="form-control" name="FeedbackForm[email]">
        <div class="hint-block">Введите адрес почты</div>
        <div class="help-block"></div>
    </div>
</form>

Поле для ввода пароля

Простое поле для пароля

// первый вариант
echo $form->field($model, 'password')->passwordInput();
// второй вариант
echo $form->field($model, 'password')->input('password');
<form id="feedback-form" class="form-horizontal" action="/web/index.php?r=page%2Ffeedback" method="post">
    <input type="hidden" name="_csrf" value=".....">
    <div class="form-group field-feedbackform-password">
    <label class="control-label" for="feedbackform-password">Password</label>
    <input type="password" id="feedbackform-password" class="form-control" name="FeedbackForm[password]">
    <div class="help-block"></div>
    </div>
</form>

Поле с подсказкой и описанием

echo $form->field($model, 'password')
          ->passwordInput()
          ->hint('Пароль должен содержать латинские символы и буквы')
          ->label('Введите пароль');
<form id="feedback-form" class="form-horizontal" action="/web/index.php?r=page%2Ffeedback" method="post">
    <input type="hidden" name="_csrf" value=".....">
    <div class="form-group field-feedbackform-password">
        <label class="control-label" for="feedbackform-password">Введите пароль</label>
        <input type="password" id="feedbackform-password" class="form-control" name="FeedbackForm[password]">
        <div class="hint-block">Пароль должен содержать латинские символы и буквы</div>
        <div class="help-block"></div>
    </div>
</form>

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

Простое многострочное поле

echo $form->field($model, 'body')->textarea();
<form id="feedback-form" class="form-horizontal" action="/web/index.php?r=page%2Ffeedback" method="post">
    <input type="hidden" name="_csrf" value=".....">
    <div class="form-group field-feedbackform-body">
        <label class="control-label" for="feedbackform-body">Body</label>
        <textarea id="feedbackform-body" class="form-control" name="FeedbackForm[body]"></textarea>
        <div class="help-block"></div>
    </div>
</form>

Многострочное поле определенного размера с описанием

echo $form->field($model, 'body')->textarea(['rows'=>4,'cols'=>10])->label('Сообщение');
<form id="feedback-form" class="form-horizontal" action="/web/index.php?r=page%2Ffeedback" method="post">
    <input type="hidden" name="_csrf" value=".....">
    <div class="form-group field-feedbackform-body">
        <label class="control-label" for="feedbackform-body">Сообщение</label>
        <textarea id="feedbackform-body" class="form-control" name="FeedbackForm[body]" rows="4" cols="10"></textarea>
        <div class="help-block"></div>
    </div>
</form>

Leave a Comment