Yii2 ActiveForm. Частина 3

312

Від автора: вітаю вас, друзі. Ми продовжуємо цикл статей, присвячених знайомству з фреймворком Yii2. У цій та наступних статтях ми детальніше розглянемо роботу з віджетом Yii2 ActiveForm. Зокрема, ми дізнаємося про різні методи, що дозволяють промалювати форму та її поля – це методи begin, field, checkbox та інші.

Отже, ми продовжуємо з вами знайомство з віджетом ActiveForm і його методами, які дозволяють нам створювати необхідні форми на сторінці. Нагадаю, у попередній статті ми з вами скористалися методом field, який дозволяє вивести поле форми. Також додатково ми використовували методи для налаштування поля – це метод passwordInput, який замість поля типу text згенерує поле password для введення пароля і метод checkbox, що генерує чекбокс.

В результаті ми отримали досить симпатичну форму, яка використовує класи Bootstrap. Ось вихідний код поля, що генерується за замовчуванням:

Yii2 ActiveForm. Частина 3

Як бачимо, поле поміщено в блок з класом form-group, є label input з класом form-control, а також є параграф, в який будуть виводитися помилки валідації, якщо такі будуть. І ось тут виникає питання: а що якщо ми хочемо змінити цю структуру? Наприклад, захочемо змінити місцями label input? Чи захочемо, щоб помилки не виводилися під полем, а поруч з ним, праворуч? Або зовсім захочемо замість класів Bootstrap використовувати свої класи? Як бути?

І ось тут нам на допомогу приходить властивість template класу yii\widgets\ActiveField. Використовуючи цю властивість, ми можемо налаштувати кожен з цих елементів. Давайте, наприклад, створимо форму, в якій помилки валідації будуть виводитися поруч з полями, а самі поля зробимо меншого розміру. Для цього використовуємо наступний код:

field($model, ‘username’, [
‘template’ => ‘

{label}
{input}
{error}


])?>
field($model, ‘password’, [
‘template’ => ‘

{label}
{input}
{error}


])->passwordInput() ?>

В результаті ми отримаємо потрібний варіант розмітки для полів нашої форми:

Yii2 ActiveForm. Частина 3

Що стосується чекбокса, то тут template необхідно використовувати вже не в методі field, а в методі checkbox:

field($model, ‘rememberMe’)->checkbox([
‘template’ => ‘

{label}
{input}
{error}


])?>

Yii2 ActiveForm. Частина 3

Також у вас може виникнути ще одне питання: а що якщо у нас велика форма з десятками полів і для всіх потрібна інша форма? Виходить, ми повинні дублювати код template для кожного з полів? Насправді немає. Yii дозволяє задати одноразово шаблон для всіх полів і зробити це можна в методі begin, ось так:

‘test-form’,
‘options’ => [‘class’ => ‘form-horizontal’],
‘fieldConfig’ => [
‘template’ => ‘

{label}
{input}
{error}

‘,
],
]); ?>
field($model, ‘username’)?>
field($model, ‘password’)->passwordInput() ?>
field($model, ‘rememberMe’)->checkbox([
‘template’ => ‘

{label}
{input}
{error}


])?>

Якщо тепер оновити сторінку браузера, то ми побачимо все той же результат. Все просто, чи не так? У наступній статті ми ще трохи попрацюємо з віджетом ActiveForm. Ну а на сьогодні поки що все.

Більше про фреймворку ви можете дізнатися з наших безкоштовних або платних уроків. Також створення найпростішого блогу на Yii2 можна подивитися в цьому циклі уроків.