Yii модулі
Модулі являють собою автономні програмні блоки. які складаються з моделей. поглядів. контролери та інші допоміжні компоненти. Кінцеві користувачі можуть отримати доступ до контролери модуля. коли він встановлений в додатку. З цих причин, модулі часто розглядаються як самостійні міні-додатки. Модулі відрізняються від додатків в цьому модулі не можуть бути розгорнуті в поодинці і повинні знаходитися в додатках.
Створення модулів ¶
Модуль організований як каталог. який називається базовий шлях модуля. В каталозі є підкаталоги, такі як controllers. models. views. які тримають контролери, моделі, уявлення і інший код, так само. як в додатку. Наступний приклад показує вміст всередині модуля:
Модуль класів ¶
Кожен модуль повинен мати унікальний клас модуля. який проходить від юй \ Base \ Module. Клас повинен бути розташований безпосередньо під модуля base path і повинен бути autoloadable. Коли модуль здійснюється доступ, буде створений один екземпляр відповідного класу модуля. Як екземпляри додатку. екземпляри модуля використовуються для обміну даними та компонентами для коду всередині модулів.
Нижче наведено приклад того, як клас модуль може виглядати наступним чином:
Якщо init () метод містить багато коду ініціалізації властивості модуля, ви можете також зберегти їх з точки зору конфігурації і завантажити його за допомогою наступного коду в init ().
Контролери в модулях ¶
При створенні контролерів в модулі, угода, щоб покласти класи контролерів під controllers суб-простір імен в просторі імен класу модуля. Це також означає. що файли класів контролерів повинні бути поміщені в controllers каталогу всередині модуля базового шляху. Наприклад, щоб створити post контролер в forum модуля. показаного в попередньому пункті, ви повинні оголосити клас контролера на кшталт такого:
Ви можете налаштувати простір імен класів контролерів шляхом настройки юй \ Base \ Module. $ ControllerNamespace властивості. В разі. якщо деякі з контролерів знаходяться за межами цього простору імен, ви можете зробити їх доступними шляхом настройки yii \ base \ Module :: $ controllerMap властивість, подібно до того. what you do in an application.
Міркування щодо модулів ¶
Міркування щодо модуля слід помістити в views каталогу всередині модуля базового шляху. Для уявлень. наданих контролером в модулі, то вони повинні бути поставлені під каталог views / ControllerID. де ControllerID відноситься до контролера ID. Наприклад, якщо клас контролера PostController. каталог буде views / post всередині модуля базового шляху.
Модуль може вказати макет. який застосовується до поглядів. що надаються контролерами модуля. Макет повинен бути поміщені в views / layouts каталогу за замовчуванням, і ви повинні налаштувати юй \ Base \ Module. $ Макета властивість. щоб вказати ім'я макета. Якщо ви не налаштувати layout властивості, макет додатки замість нього буде використовуватися.
Команди консолі в модулях ¶
Ваш модуль може також оголосити команди, які будуть доступні через консоль режиму.
Для того. щоб утиліти командного рядка. щоб побачити ваші команди, вам потрібно буде змінити юй \ Base \ Module. $ ControllerNamespace властивість, коли Yii виконується в режимі консолі, і направте його на ваші команди імен.
Один із способів досягнення того. щоб перевірити тип екземпляра додатка Yii в модуля init () метод:
Ваші команди будуть доступні з командного рядка, використовуючи наступний маршрут:
Використання модулів ¶
Для того, щоб використовувати модуль в додатку, просто налаштувати додаток шляхом перерахування модуля в modules власності заявки. Наступний код в конфігурації програми використовує forum модуля:
Модулі властивість приймає масив конфігурацій модулів. Кожен ключ масиву представляє собою ідентифікатор модуля. який однозначно ідентифікує модуль серед всіх модулів програми, і відповідне значення масиву є конфігурація для створення модуля.
Маршрути ¶
Доступ до модулів ¶
Всередині модуля, ви можете часто необхідно отримати екземпляр класу модуля. так що ви можете отримати доступ до ідентифікатор модуля, параметри модуля, компонентів модуля і т.д. Ви можете зробити це, використовуючи наступну заяву:
де MyModuleClass відноситься до імені класу модуля. який вас цікавить. getInstance () метод повертає запитаний в даний момент екземпляр класу модуля. Якщо модуль не потрібно, цей метод буде повертати null. Зверніть увагу, що ви не хочете, щоб вручну створити новий екземпляр класу модуля, оскільки він буде відрізнятися від тієї, яку створює Yii у відповідь на запит.
Інформація: При розробці модуля, ви не повинні вважати. модуль буде використовувати фіксований ідентифікатор. Це відбувається тому, що модуль може бути пов'язаний з довільним ID при використанні в додатку або в іншому модулі. Для того. щоб отримати ідентифікатор модуля, ви повинні використовувати вищевказаний підхід. щоб отримати примірник модуля, а потім отримати ID за допомогою $ module-> id.
Ви також можете отримати доступ до примірника модуля, використовуючи такі підходи:
Перший підхід полягає тільки корисно, коли ви знаєте ідентифікатор модуля, в той час як другий підхід найкраще використовувати, коли ви знаєте про контролери запитуються.
Після того, як у вас є екземпляр модуля, ви можете отримати доступ до параметрів і компоненти, зареєстровані в комплекті з модулем. наприклад,
Модулі самозавантаженням ¶
Деякі модулі, можливо, повинні бути запущені для кожного запиту. debug модуль такий приклад. Для цього, список ідентифікаторів таких модулів в bootstrap власності заявки.
Наприклад, наступна конфігурація додатку гарантує. що debug модуль завжди завантажується:
Модулі Вкладені ¶
Модулі можуть бути вкладені в необмежених рівнях. Тобто, модуль може містити ще один модуль, який може містити ще один модуль. Ми називаємо колишній батьківський модуль в той час як другий модуль дитини. Модулі по догляду за дітьми повинні бути оголошені в модулях власності їх батьківських модулів. наприклад,
Для контролера всередині вкладеного модуля, його маршрут повинен включати в себе ідентифікатори всіх своїх предків модулів. Наприклад, маршрут forum / admin / dashboard / index є index дію dashboard контролера в admin - модуля. який є дочірнім модуль forum модуля.
Інформація: getModule () метод повертає тільки модуль дитини безпосередньо приналежність до свого батька. yii \ base \ Application :: $ loadedModules властивість зберігає список завантажених модулів, в тому числі як прямих. так і дітей. вкладених один в одного ті, індексованих їх іменами класів.
Кращі практики ¶
Модулі найкраще використовувати у великих додатках, чиї функції можуть бути розділені на кілька груп, кожна з яких складається з безлічі тісно пов'язаних між собою функцій. Кожна така функція група може бути розроблена в якості модуля, який розробляється і підтримується конкретним розробником або командою.