Віджети - структура програми - повне керівництво по yii 2

Віджети є багаторазові будівельні блоки, які використовуються в уявленнях для створення складних і настроюються елементів призначеного для користувача інтерфейсу в рамках об'єктно-орієнтованого підходу. Наприклад, віджет вибору дати (date picker) дозволяє генерувати інтерактивний інтерфейс для вибору дат, надаючи користувачам додатка зручний спосіб для введення даних такого типу. Все, що потрібно для підключення віджета - це додати наступний код в уявлення:

У комплект Yii входить велика кількість віджетів, наприклад: active form. menu. віджети jQuery UI. віджети Twitter Bootstrap. Далі будуть представлені базові відомості про віджети. Для отримання відомостей щодо використання конкретного віджета, слід звернутися до документації відповідного класу.

Використання віджетів

Головним чином, віджети застосовують в уявленнях. Для того, щоб використовувати віджет в поданні, досить викликати метод yii \ base \ Widget :: widget (). Метод приймає масив налаштувань для ініціалізації віджета і повертає результат його рендеринга. Наприклад, наступний код додає віджет для вибору дати, конфігурований для використання українського в якості мови інтерфейсу віджета і зберігання даних, що вводяться в атрибуті from_date моделі $ model.

Деякі віджети можуть мати внутрішній вміст, яке слід розташовувати між викликами методів yii \ base \ Widget :: begin () і yii \ base \ Widget :: end (). Наприклад, для генерації форми входу, в наступному фрагменті коду використовується віджет yii \ widgets \ ActiveForm. Цей віджет згенерує відкриває і закриває теги

в місцях виклику методів begin () і end () відповідно. При цьому, вміст, розташоване між викликами зазначених методів буде виведено без будь-яких змін.

Зверніть увагу на те, що на відміну від методу yii \ base \ Widget :: widget (). який повертає результат рендеринга, метод yii \ base \ Widget :: begin () повертає екземпляр віджета, який може бути використаний в подальшому для формування його внутрішнього вмісту.

Завдання глобальних замовчувань

Глобальні умовчання для певного типу віджета можуть бути задані через DI контейнер:

створення віджетів

Для того, щоб створити віджет, слід успадкувати клас yii \ base \ Widget і перевизначити методи yii \ base \ Widget :: init () і / або yii \ base \ Widget :: run (). Як правило, метод init () повинен містити код, який виконує нормалізацію властивостей віджета, а метод run () - код, який повертає результат рендеринга віджета. Результат рендеринга може бути виведений безпосередньо за допомогою конструкції "echo" або ж повернутий в рядку методом run ().

У наступному прикладі, віджет HelloWidget HTML-кодує і відображає вміст, присвоєне властивості message. У разі, якщо зазначена властивість не встановлено, віджет, як значення за замовчуванням відобразить рядок "Hello World".

Для того, щоб використовувати цей віджет, досить додати в уявлення наступний код:

Нижче представлений варіант віджета HelloWidget. який приймає вміст, обрамлене викликами методів begin () і end (). HTML-кодує його та виводить.

Як Ви можете бачити, в методі init () відбувається включення буферизації виведення PHP таким чином, що весь висновок між викликами init () і run () може бути перехоплений, оброблений і повернений в run ().

Info: При виклику методу yii \ base \ Widget :: begin () буде створений новий екземпляр віджета, при цьому виклик методу init () відбудеться відразу після виконання решти коду в конструкторі віджета. При виклику методу yii \ base \ Widget :: end (). буде викликаний метод run (). а повернене їм значення буде виведено методом end ().

Наступний фрагмент коду містить приклад використання модифікованого варіанту HelloWidget:

У деяких випадках, віджету може знадобитися вивести великий блок вмісту. І хоча це вміст може бути вбудовано безпосередньо в метод run (). доцільніше помістити його в уявлення і викликати метод yii \ base \ Widget :: render () для його рендеринга. наприклад,

За замовчуванням, файли представлень віджетів повинні знаходитися в директорії WidgetPath / views. де WidgetPath - директорія, що містить файл класу віджета. Таким чином, у наведеному вище прикладі, для віджета буде використаний файл уявлення @ app / components / views / hello.php. при цьому файл з класом віджета розташований в @ app / components. Для того, щоб змінити директорію, в якій містяться файли-вистави для віджета, слід перевизначити метод yii \ base \ Widget :: getViewPath ().

Кращі практики

Віджети є об'єктно-орієнтований підхід до повторного використання коду призначеного для користувача інтерфейсу.

При створенні віджетів, слід дотримуватися основних принципів концепції MVC. У загальному випадку, основну логіку слід розташовувати в класі віджета, розділяючи при цьому код, який відповідає за розмітку в уявлення.

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

Схожі статті