Манифест модуля
Структура manifest.php модуля DevCraft Admin.
Зачем: без manifest.php DevCraft не знает ваш модуль — не будет меню, AJAX и страницы changelog.
Файл лежит в devcraft/src/modules/{Name}/manifest.php. Эталон — devcraft/src/modules/Admin/manifest.php.
Два способа вернуть данные
| Стиль | Что возвращает return | Когда удобно |
|---|---|---|
| Legacy | PHP-массив с ключами mod, meta, … | Старые модули, генератор |
| Fluent | ModuleManifest через 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») |
version | SemVer; major = ветка DLE (версионирование) |
description | Краткое описание |
icon | Metro UI (mif-*) |
docsLink | URL документации |
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,
],
],| Ключ | Описание |
|---|---|
name | vendor/package |
minVersion | Constraint |
hardRequired | true — обязателен; false — рекомендуемый |
Подробнее: Composer-пакеты модулей.
Регистрация
Registry сканирует devcraft/src/modules/*/manifest.php и строит меню DLE. См. Registry, PluginContext.