Модули располагаются в папке modules Обычно модуль для JohnCMS имеет следующую структуру:
modules
vendor_name
module_name
config
routes.php
src
Controllers
Install
locale
templates
composer.json
Данная структура носит лишь рекомендательный характер и не является обязательной. Система не накладывает ограничений на разработчика и разработчик вправе использовать свою структуру модуля, которая для него будет удобнее.
Давайте подробнее посмотрим на структуру и разберемся что и для чего предназначено.
modules - это обычная системная папка с модулями.
vendor_name - Имя разработчика модуля
module_name - это папка с названием модуля (например forum, community и т.п.)
config - содержит конфигурационные файлы модуля.
routes.php - файл с настройками маршрутов модуля.
src - папка с классами модуля (используется для автозагрузки классов и будет иметь пространство имен VendorName\ModuleName)
Controllers - папка с контроллерами. Пространство имен VendorName\ModuleName\Controllers
Install - папка с установочными файлами. Пространство имен VendorName\ModuleName\Install
locale - это папка в которой хранятся файлы локализации модуля. Если модуль мультиязычный, то эта папка обычно есть.
templates - в этой папке хранятся шаблоны модуля.
composer.json - файл с некоторыми основными параметрами. Подробнее смотрите ниже.
Автоматическая загрузка классов реализуется с помощью файла composer.json.
Пример файла composer.json:
В этом примере стоит обратить внимание на следующие значения:
name - Название модуля с указанием разработчика vendor_name/module_name
type - Обязательно должен быть johncms-module
autoload - В этой секции описываются правила автозагрузки классов вашего модуля. Рекомендуется делать так же как указано в примере. Параметр Johncms\\Auth\\ это пространство имен, а src/ это папка в папке с модулем из которой будут загружаться классы. Начальный сегмент пространства имен обычно содержит в себе имя разработчика (Johncms) и название модуля (Auth). Каждое слово следует начинать с заглавной буквы.
Более подробно про автозагрузку можно почитать в официальной документации composer https://getcomposer.org/doc/04-schema.md#autoload