Модули
Модуль — это папка, в которой собрано всё для одной части сайта: контроллеры, шаблоны, настройки. Блог, магазин, личный кабинет — каждый в своём модуле. Так код не смешивается, а готовый модуль можно перенести в другой проект.
Команды для создания модуля в Laminas нет — папки и файлы создают вручную. Шагов пять.
Шаг 1. Папки
Создайте в папке module такую структуру:
module/Blog/
├── config/
│ └── module.config.php
├── src/
│ └── Module.php
└── view/Имя папки модуля пишут с большой буквы: оно совпадает с пространством имён PHP.
Шаг 2. Класс модуля
По этому классу Laminas узнаёт, что модуль существует и где его настройки. Создайте файл module/Blog/src/Module.php:
// module/Blog/src/Module.php
namespace Blog;
class Module
{
public function getConfig(): array
{
return include __DIR__ . '/../config/module.config.php';
}
}Метод getConfig() возвращает массив из файла настроек модуля. Laminas вызывает его сам при запуске.
Шаг 3. Файл настроек
Создайте файл module/Blog/config/module.config.php. Пока в нём пустой массив:
// module/Blog/config/module.config.php
namespace Blog;
return [];В следующих уроках сюда добавятся маршруты, контроллеры и пути к шаблонам. Строка namespace Blog; позволит писать имена классов модуля короче.
Шаг 4. Загрузка классов
Composer должен знать, в какой папке искать классы с именами на Blog\. Откройте composer.json в корне проекта и добавьте строку в раздел autoload:
{
"autoload": {
"psr-4": {
"Application\\": "module/Application/src/",
"Blog\\": "module/Blog/src/"
}
}
}Остальные разделы файла не трогайте. Затем обновите загрузчик классов:
composer dump-autoloadШаг 5. Подключение
Добавьте имя модуля в конец списка в файле config/modules.config.php:
// config/modules.config.php
return [
'Laminas\Router',
'Laminas\Validator',
'Application',
'Blog',
];Модули загружаются в порядке списка. Откройте http://localhost:8080: если главная страница открылась без ошибок, модуль подключён. Своих страниц у него пока нет — они появятся в уроке о маршрутах.
Частая ошибка
Если пропустить шаг 4 или забыть composer dump-autoload, сайт покажет ошибку Module (Blog) could not be initialized. Она означает, что имя модуля в списке есть, а класс Blog\Module не найден. Проверьте строку в composer.json, имя папки и пространство имён в Module.php — регистр букв должен совпадать.