Від автора: вітаю вас, друзі. Ми продовжуємо цикл статей, присвячених знайомству з фреймворком Yii2. У цій та наступних статтях ми детальніше розглянемо роботу з віджетом Yii2 ActiveForm. Зокрема, ми дізнаємося про різні методи, що дозволяють промалювати форму та її поля – це методи begin, field, checkbox та інші.
Отже, ми продовжуємо з вами знайомство з віджетом ActiveForm і його методами, які дозволяють нам створювати необхідні форми на сторінці. Нагадаю, у попередній статті ми з вами скористалися методом field, який дозволяє вивести поле форми. Також додатково ми використовували методи для налаштування поля – це метод passwordInput, який замість поля типу text згенерує поле password для введення пароля і метод checkbox, що генерує чекбокс.
В результаті ми отримали досить симпатичну форму, яка використовує класи Bootstrap. Ось вихідний код поля, що генерується за замовчуванням:
Як бачимо, поле поміщено в блок з класом form-group, є label input з класом form-control, а також є параграф, в який будуть виводитися помилки валідації, якщо такі будуть. І ось тут виникає питання: а що якщо ми хочемо змінити цю структуру? Наприклад, захочемо змінити місцями label input? Чи захочемо, щоб помилки не виводилися під полем, а поруч з ним, праворуч? Або зовсім захочемо замість класів Bootstrap використовувати свої класи? Як бути?
І ось тут нам на допомогу приходить властивість template класу yii\widgets\ActiveField. Використовуючи цю властивість, ми можемо налаштувати кожен з цих елементів. Давайте, наприклад, створимо форму, в якій помилки валідації будуть виводитися поруч з полями, а самі поля зробимо меншого розміру. Для цього використовуємо наступний код:
field($model, ‘username’, [
‘template’ => ‘
‘
])?>
field($model, ‘password’, [
‘template’ => ‘
‘
])->passwordInput() ?>
В результаті ми отримаємо потрібний варіант розмітки для полів нашої форми:
Що стосується чекбокса, то тут template необхідно використовувати вже не в методі field, а в методі checkbox:
field($model, ‘rememberMe’)->checkbox([
‘template’ => ‘
‘
])?>
Також у вас може виникнути ще одне питання: а що якщо у нас велика форма з десятками полів і для всіх потрібна інша форма? Виходить, ми повинні дублювати код template для кожного з полів? Насправді немає. Yii дозволяє задати одноразово шаблон для всіх полів і зробити це можна в методі begin, ось так:
‘test-form’,
‘options’ => [‘class’ => ‘form-horizontal’],
‘fieldConfig’ => [
‘template’ => ‘
‘,
],
]); ?>
field($model, ‘username’)?>
field($model, ‘password’)->passwordInput() ?>
field($model, ‘rememberMe’)->checkbox([
‘template’ => ‘
‘
])?>
Якщо тепер оновити сторінку браузера, то ми побачимо все той же результат. Все просто, чи не так? У наступній статті ми ще трохи попрацюємо з віджетом ActiveForm. Ну а на сьогодні поки що все.
Більше про фреймворку ви можете дізнатися з наших безкоштовних або платних уроків. Також створення найпростішого блогу на Yii2 можна подивитися в цьому циклі уроків.