Модулі у файловій структурі Magento 2

Файли модулів у Magento 2 розміщені у 2-х директоріях.

1. app/code/<VendorName>/<ModuleName>/
2. vendor/<vendor-name>/<module-name>/

Vendor Name -  назва компанії/особи, що розробляє модуль. У перекладі з англійської "vendor"- постачальник.. У деяких випадках назва вендора може співпадати з назвою компанії замовника. Тому перед початком розробки нового модуля її варто узгодити. У прикладах ми послуговуємося своєю назвою - Magefan..

Файли модулів, розроблені на замовлення чи модулі від інших компаній, встановлені за допомогою FTP, розміщені у папці app/code.

У папці vendor розміщені модулі ядра Magento 2, а також модулі, які встановлені за допомогою Web Setup Wizard чи Composer. Модулі ядра Magento ви знайдете у папці vendor/magento.

Цікаво знати:
У репозиторії Magento 2 (dev вітка) на GitHub (https://github.com/magento/magento2) усі модулі ядра знаходяться  у папці app/code/Magento, а усі PHP бібліотеки у lib/internal/Magento. Ця структура використовувалася під час розробки Magento 2, задовго до офіційного релізу та існування папки vendor. Для зручності ця структура і досі застосовується на GitHub.

Структура модуля Magento 2

├── Api // PHP класи, що відповідають за роботу REST API;
├── Block // PHP класи вигляду (view), у термінології MVC. Вони містять методи, які використовуються у .phtml шаблонах (templates);
│    ├── Adminhtml // view-класи адмін-панелі;
│    └── SomeBlock.php // view-клас (block) який використовується на вітрині (storefront);
│
├── Controller // PHP контролер-класи (частина MVC);
│    └── Adminhtml // контролер-класи, що застосовуються в адмін-панелі;
│
├── Cron // PHP класи, методи яких викликаються при виконанні cron-задач;
├── Helper // PHP класи з допоміжною логікою. Їхні методи використовуються у різних частинах модуля; ├── Model // PHP класи моделей (частина MVC); ├── Observer // PHP класи слухачів (обсерверів); ├── Plugin // PHP класи перехоплювачів (interceptors); ├── Setup // PHP класи які використовуються при встановленні, оновленні та видаленні модуля, дозволяють змінювати дані та структуру бази даних; ├── UI // PHP класи, що працюютьз UI-компонентами; ├── etc // конфігураційні файли модуля; │ ├── adminhtml // конфігураційні файли, які відносятся лише до адмін-панелі; │ │ ├── admingws.xml // відповідає за розмежування прав на рівні Store View (використовується лише у Enterprise версії (EE) Magento 2); │ │ ├── di.xml // налаштування плагінів, віртуальних типів, переписування моделей.; │ │ ├── menu.xml // відповідає за побудову меню; │ │ ├── routers.xml // налаштування роутів; │ │ ├── system.xml // побудова сторінки налаштувань Stores > Configuration; │ │ └── events.xml //налаштування слухачів (observers); │ │ │ ├── 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 │ └── uk_UA.csv │ ├── view // файли вигляду: макети, темплейти, js, css, html, зображення, шрифти; │ ├── adminhtml // файли задіяні в адмін-панелі; │  ├── frontend // файли задіяні на вітрині; │    │ └── layout // xml-файли макету; │    │ └── templates // phtml-файли шаблону; │    │ └── web // статичні файли; │    │ └── css │    │ └── images │    │ └── js │    │
│    └── base // view-файли, які використовуються на вітрині та адмін-панелі;
│ ├── LICENSE.txt // файл з описом ліцензії, згідно якої використовується модуль; ├── README.md // опис функціональності модуля; ├── composer.json // файл, що дозволяє в подальшому встановлювати модуль через composer; └── registration.php // файл, що реєструє модуль у системі;

Така структура не містить усіх можливих директорій і файлів, що можуть знаходитись у модулі Magento 2. Вона лише відображає часто використовувані компоненти модуля.

Структуру Magento 2 модулів можна дослідити й самостійно. Для цього слід звернути увагу на модулі:

 - Magento_Cms (vendor/magento/module-cms)
 - Magento_Catalog (vendor/magento/module-catalog)