DevCraft Документации
СправочникBack-End

Манифест модуля

Структура manifest.php модуля DevCraft Admin.

Зачем: без manifest.php DevCraft не знает ваш модуль — не будет меню, AJAX и страницы changelog.

Файл лежит в devcraft/src/modules/{Name}/manifest.php. Эталон — devcraft/src/modules/Admin/manifest.php.

Два способа вернуть данные

СтильЧто возвращает returnКогда удобно
LegacyPHP-массив с ключами mod, meta, …Старые модули, генератор
FluentModuleManifest через ModuleManifestBuilder::…->build(__DIR__)Новые модули, IDE-подсказки

Оба варианта загружает Registry через ModuleManifest::fromLoaded() — массив или готовый объект. Подробнее: Fluent Types.

Fluent (краткий пример)

use DevCraft\Types\AdminLink;
use DevCraft\Builders\ModuleManifestBuilder;
use DevCraft\Builders\ModuleAjaxConfigBuilder;

return ModuleManifestBuilder::create()
    ->mod('my_module')
    ->code('my_module')
    ->name('Мой модуль')
    ->version('200.1.0')
    ->description(__('Описание для админки'))
    ->icon('mif-cube')
    ->menu([
        AdminLink::page(__('Главная'), 'dashboard', DashboardPage::class, 'mif-home'),
    ])
    ->ajax(
        ModuleAjaxConfigBuilder::create('admin')
            ->method('settings', SettingsHandler::class)
            ->publicMethod('ping', PublicPingHandler::class, true)
    )
    ->changelog(require DLEPlugins::Check(__DIR__ . '/changelog.data.php'))
    ->build(__DIR__);

Legacy-массив (тот же смысл)

return [
    'mod'  => 'my_module',
    'code' => 'my_module',
    'meta' => [
        'name'        => 'Мой модуль',
        'version'     => '200.1.0',
        'description' => __('…'),
        'icon'        => 'mif-cube',
    ],
    'menu' => [/* AdminLink::page … */],
    'ajax' => [
        'controller' => 'admin',
        'methods'    => ['settings' => SettingsHandler::class],
    ],
    'changelog' => require DLEPlugins::Check(__DIR__ . '/changelog.data.php'),
];

Зависимость от shared-пакета — в composer_required. См. Shared-пакеты и абстракции.

Блок meta

Метаданные для UI и ссылок:

КлючОписание
nameИмя в меню («DevCraft Admin»)
versionSemVer; major = ветка DLE (версионирование)
descriptionКраткое описание
iconMetro UI (mif-*)
docsLinkURL документации
siteLinkСтраница на devcraft.club
authorИмя, контакты, донаты

Блок menu

Пункты бокового меню через AdminLink::page():

AdminLink::page(__('Главная'), 'dashboard', DashboardPage::class, 'mif-home'),
  • slug — сегмент URL (action=dashboard);
  • класс страницыPageInterface;
  • 5-й аргумент mod — для сателлитов (не devcraft).

Страница без пункта в меню (роут есть, пункта нет):

AdminLink::hidden('edit', EditPage::class),

Блок ajax

Admin-обработчики и публичный API:

'ajax' => [
    'controller' => 'admin',
    'methods'    => [
        'settings' => SettingsHandler::class,
    ],
    'public' => [
        'list' => ['handler' => ListHandler::class, 'allow_guest' => false],
    ],
],

Запросы идут на devcraft/ajax.php: mod, controller, method, user_hash. Сателлитам нужен mod={код}. Handler — AjaxHandlerInterface.

Fluent-эквивалент: ModuleAjaxConfigBuilder + publicMethod() — см. Fluent Types.

Блок assets

JS/CSS относительно каталога модуля:

'assets' => ['js' => ['admin.js']],

Блок changelog

Массив версий или require changelog.data.php. Элементы — массив, Changelog или ChangelogBuilder::…->build().

Блок composer_required

Обязательные пакеты Composer для модуля:

'composer_required' => [
    [
        'name'         => 'devcraftclub/dev-tools',
        'minVersion'   => '^1.0',
        'hardRequired' => true,
    ],
],
КлючОписание
namevendor/package
minVersionConstraint
hardRequiredtrue — обязателен; false — рекомендуемый

Подробнее: Composer-пакеты модулей.

Регистрация

Registry сканирует devcraft/src/modules/*/manifest.php и строит меню DLE. См. Registry, PluginContext.

См. также

На этой странице