Структура проекта
Проект Magento состоит из десятка папок, но свой код разработчик пишет только в двух из них. Остальные содержат ядро, настройки и файлы, которые Magento создаёт сам. Полезно сразу понять, что можно менять, а что нет.
Корень проекта
shop/
├── app/
│ ├── code/ свои модули
│ ├── design/ свои темы
│ └── etc/ настройки установки
├── bin/magento консольная команда
├── generated/ сгенерированные классы
├── pub/ корень сайта
├── var/ кеш, журналы, отчёты об ошибках
├── vendor/ ядро и сторонние пакеты
└── composer.json список пакетовГде что лежит
| Папка | Что в ней | Можно ли менять |
|---|---|---|
app/code | Свои модули: app/code/Поставщик/Модуль | Да, здесь идёт вся работа |
app/design | Свои темы оформления | Да |
app/etc | Файлы env.php и config.php | Осторожно |
vendor/magento | Модули ядра | Нет |
generated | Классы, созданные Magento | Нет, только удалять |
pub/static | Собранные стили, скрипты, картинки тем | Нет, только удалять |
pub/media | Загруженные картинки товаров | Нет |
var | Кеш, журналы в var/log | Нет, только читать и удалять |
Папки app/code сразу после установки может не быть — её создают вручную.
Файлы в app/etc
Файл app/etc/env.php хранит настройки сервера: доступ к базе данных, адрес панели, ключ шифрования. На каждом сервере он свой, и в систему контроля версий его не добавляют.
Файл app/etc/config.php содержит список модулей и признак, включён ли каждый:
// app/etc/config.php
return [
'modules' => [
'Magento_Store' => 1,
'Magento_Catalog' => 1,
'Acme_Hello' => 1,
],
];Единица означает, что модуль включён. Файл изменяют команды bin/magento, а не человек, и хранят его вместе с кодом проекта.
Модули ядра
Ядро — такие же модули, как ваш будущий. Каталог товаров лежит в vendor/magento/module-catalog, заказы — в vendor/magento/module-sales. Имя модуля каталога в коде — Magento_Catalog, а его классы начинаются с Magento\Catalog.
Эти папки стоит читать: когда непонятно, как устроен файл XML или класс, готовый пример почти всегда находится в ядре.
Папка модуля
У каждого модуля одинаковое строение. С ним вы познакомитесь постепенно, а пока достаточно общего вида:
| Папка | Что в ней |
|---|---|
etc | Настройки XML |
Controller | Действия, отвечающие на запросы |
Model | Работа с данными |
view | Макеты, шаблоны, стили и скрипты |
Частая ошибка
Сервер настроили на корень проекта вместо папки pub. Тогда из браузера можно открыть app/etc/env.php с паролем базы данных и журналы в var/log. Корнем сайта всегда должна быть папка pub.