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

Модули располагаются в папке 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:

composer.json
{
    "name": "johncms/auth",
    "description": "Auth module",
    "minimum-stability": "dev",
    "homepage": "https://johncms.com",
    "license": "MIT",
    "type": "johncms-module",
    "authors": [
        {
            "name": "JohnCMS Contributors",
            "homepage": "https://github.com/johncms/johncms/graphs/contributors"
        }
    ],
    "require": {
        "php": "^8.0"
    },
    "autoload": {
        "psr-4": {
            "Johncms\\Auth\\": "src/"
        }
    }
}

В этом примере стоит обратить внимание на следующие значения:

  • name - Название модуля с указанием разработчика vendor_name/module_name

  • type - Обязательно должен быть johncms-module

  • autoload - В этой секции описываются правила автозагрузки классов вашего модуля. Рекомендуется делать так же как указано в примере. Параметр Johncms\\Auth\\ это пространство имен, а src/ это папка в папке с модулем из которой будут загружаться классы. Начальный сегмент пространства имен обычно содержит в себе имя разработчика (Johncms) и название модуля (Auth). Каждое слово следует начинать с заглавной буквы.

Более подробно про автозагрузку можно почитать в официальной документации composer https://getcomposer.org/doc/04-schema.md#autoload

Last updated