Огляд дефолтної структури папок в модулі Magento 2
Щоб зрозуміти, як працює модуль, спочатку потрібно з’ясувати, як основні компоненти (наприклад, контролери, моделі, блоки) взаємодіють один з одним. А перед цим також важливо знати, як ці компоненти структуровані в платформі Magento 2. У цій статті ми приділимо увагу огляду дефолтної структури модуля (основних папок і деяких файлів), щоб краще розуміти організацію цієї нової платформи.
Папки та файли модуля в Magento 2 можуть бути розміщені в 2-х каталогах:
app/code/<VendorName>/<ModuleName>/ vendor/<vendor-name>/<module-name>/
<VendorName>
— це, в основному, назва компанії, яка розробила модуль. Також це може бути і, наприклад, нікнейм програміста, який створив даний модуль. У перекладі з англійської “vendor” означає “постачальник”, що має явно ідентифікувати творця модуля. Якщо ви розробляєте модуль, використовуйте для цього унікальне значення.
Якщо модуль розробляється вами або вашою компанією, його файли розміщуються в папці app/code
.
Якщо ви встановлюєте модуль через Composer, його файли розміщуються в папці vendor
. Також тут розміщуються модулі ядра платформи Magento 2. Знайти ви можете їх за постачальником, тобто, в папці vendor/magento
.
Орієнтовна структура папок і файлів модуля
Графічно типова структура файлу для модуля Magento 2 може виглядати наступним чином:
Короткий опис призначення файлів і каталогів в модулі Magento 2
├── Api // PHP класи для REST API; ├── Block // PHP класи, що відповідають за View по MVC. Методи, які використовуються у .phtml шаблонах; ├── Controller // ці файли несуть відповідальність за з'єднання модулів із зовнішнім світом, наприклад, при зміні URL-адреси; ├── Cron // PHP класи, що обслуговують методи, які пов'язані із задачами Cron (завдання за розкладом); ├── Helper // містить файли, які відповідають за виконання загальних (допоміжних) завдань для об'єктів та змінних; ├── Model // PHP класи, що відповідають за Module по MVC; ├── Observer // PHP класи обсерверів (слухачів подій); ├── Plugin // PHP класи перехоплювачів (до, після, та навколо); ├── Setup // містить файли, необхідні для внесення змін у базу даних, тобто створення таблиць, полів або інших записів, необхідних для виконання роботи модуля; ├── UI // PHP класи, що відповідають за роботу з UI-компонентами; ├── etc // папка містить конфігураційні файли модуля; │ ├── adminhtml // конфігураційні файли, які зачіпають лише адмінпанель сайту; │ │ ├── di.xml // налаштування плагінів, віртуальних типів, переписування моделей; │ │ ├── menu.xml // відповідає за побудову меню в адмінпанелі; │ │ ├── routers.xml //налаштування маршрутів; │ │ ├── system.xml // побудова сторінки налаштувань в розділі Stores > Configuration; │ │ └── events.xml //налаштування обсерверів (слухачів подій); │ │ │ ├── frontend // конфігураційні файли, що відносяться до фронт-енду сайту; │ │ ├── di.xml │ │ ├── events.xml │ │ ├── routers.xml │ │ └── events.xml │ │ │ ├── acl.xml // налаштування розмежування прав у адмінпанелі; │ ├── config.xml // містить дефолтні значення для полів налаштувань у розділі Stores > Configuration; │ ├── crontab.xml // файл для налаштування задач Cron (завдань за розкладом); │ ├── di.xml │ ├── webapi.xml // тут відбувається налаштування REST API; │ └── widget.xml // файл з налаштуваннями для віджетів; │ ├── i18n // папка з CSV-файлами, що відповідають за локалізацію (переклади); │ ├── en_US.csv │ └── fr_FR.csv │ ├── view // тут містяться файли, що надають вигляду інтернет-магазину: макети (layout), .phtml шаблони, js файли, стилі css, простий html, картинки та шрифти; │ ├── adminhtml // медіа-файли, що надають вигляду бекенду (адмінпанелі); │ ├── frontend // ресурси, що надають вигляду фронт-енду; │ │ └── layout // xml-файли макету; │ │ └── templates // phtml-файли шаблону; │ │ └── web // статичні файли; │ │ └── css │ │ └── images │ │ └── js │ │ │ └── base // дефолтні ресурси, що надають вигляду і фронт-енду, і бекенду; │ ├── LICENSE.txt // файл, що містить умови ліцензії, за якою надається поточний модуль; ├── README.md // технічний опис всього того, що вміє модуль (функціональності); ├── composer.json // за допомогою цього файлу модуль встановлюється через Composer; └── registration.php // файл, за допомогою якого модуль реєструється у платформі Magento 2;
Розуміння структури модуля в Magento 2 дозволяє аналізувати логіку і функціональність розширення, а також трохи полегшує пошук і усунення помилок і конфліктів, що можуть виникати.