От автора: приветствую вас, друзья. Мы продолжаем цикл статей, посвященных знакомству с фреймворком Yii2. В этой и следующих статьях мы подробнее рассмотрим работу с виджетом Yii2 ActiveForm. В частности, мы узнаем о различных методах, позволяющих отрисовать форму и ее поля – это методы begin, field, checkbox и другие.
Итак, в предыдущей статье мы приступили к работе с виджетом ActiveForm, благодаря которому можно создавать формы в Yii. Мы узнали, что для создания формы потребуются все компоненты: модель, контроллер и представление. И, наконец, мы познакомились с первыми двумя методами ActiveForm, с которых начинается создание формы, — это методы begin и end. Благодаря методу begin мы не только создаем объект формы и открываем ее, но и заодно можем настроить, передав массив параметров. Тем самым мы можем указать нужные нам атрибуты формы: id, class, action, method и прочие.
Теперь на очереди создание полей формы, у нас их три: username, password и rememberMe. Все три поля имеют разный тип. Для создания полей формы используется метод field, который может принимать три параметра: модель формы, имя поля и опциональный массив параметров. Давайте попробуем создать необходимые нам поля.
1 2 3 4 5 6 7 8 9 |
<?php $form = ActiveForm::begin([ 'id' => 'test-form', ]); ?> <?= $form->field($model, 'username') ?> <?= $form->field($model, 'password') ?> <?= $form->field($model, 'rememberMe') ?> <?php ActiveForm::end(); ?> |
Весь необходимый код мы, само собой, размещаем между методами begin и end. Давайте посмотрим на результат.
Форма появилась – это уже хорошо. Вот только результат не совсем тот, который нам нужен. Во-первых, последнее поле должно быть чекбоксом, а это обычное текстовое поле. Ну и поле для ввода пароля имеет тип text вместо нужного нам типа password, т.е. при вводе пароля в это поле – он не будет скрыт за звездочками. Все это потому, что метод field по умолчанию генерирует поля типа text. Если мы хотим получить другой тип поля, тогда необходимо вызвать дополнительные методы ActiveForm, которые позволят настроить поле.
Получить тип password поможет метод passwordInput, ну а для получения чекбокса воспользуемся методом checkbox. Полный список методов можно найти в документации. Допишем наш код.
1 2 3 |
<?= $form->field($model, 'username') ?> <?= $form->field($model, 'password')->passwordInput() ?> <?= $form->field($model, 'rememberMe')->checkbox()?> |
В итоге мы получим нужный вид формы.
Как видим, все достаточно просто. Форма проходит валидацию, в этом можно убедиться, если установить фокус в поле, а затем убрать из него курсор мыши, оставив пустым.
Сообщение об ошибке выводится под соответствующим полем. Так форма работает по умолчанию. Хорошо, а что если мы хотим изменить такой формат, например, хотим чтобы валидационное сообщение выводилось справа от поля или захотим убрать label формы? Как быть? Ответ на этот вопрос мы узнаем с вами в следующей статье. Ну а данную статью позвольте закончить.
Больше о фреймворке вы можете узнать из наших бесплатных или платных уроков. Также создание простейшего блога на Yii2 можно посмотреть в этом цикле уроков.