Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Модули

Модуль — это папка, в которой собрано всё для одной части сайта: контроллеры, шаблоны, настройки. Блог, магазин, личный кабинет — каждый в своём модуле. Так код не смешивается, а готовый модуль можно перенести в другой проект.

Команды для создания модуля в 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 — регистр букв должен совпадать.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.