Сторонние модули со своим пространством имён v200.4.1
Как подключить модуль не из DevCraft\Modules\: namespace в манифесте, PSR-4 при старте, настройки в third_party, два пути установки.
Зачем: поставить свой модуль в админку DevCraft, не втискиваясь в пространство имён ядра и не правя корневой composer.json панели.
Нужна Admin ≥ 200.4.1. Обычный штатный модуль по-прежнему собирают через Создание модуля; этот гайд — для чужого префикса классов.
Своё пространство имён
Классы модуля могут жить в любом PSR-4 префиксе, например VasyaPupkin\Settings\.
Панель при старте читает манифесты и регистрирует префикс → корень каталога модуля. Отдельный composer.json у модуля и dump-autoload на каждый сторонний пакет не нужны.
Поле namespace в манифесте
Fluent:
return ModuleManifestBuilder::create()
->mod('vasya_pupkin_settings')
->code('vasya_pupkin_settings')
->namespace('VasyaPupkin\\Settings\\')
->name('Настройки Васи Пупкина')
->version('1.0.0')
->menu([
AdminLink::page('Настройки', 'dashboard', SettingsPage::class, 'mif-cog', 'vasya_pupkin_settings'),
])
->ajax(
ModuleAjaxConfigBuilder::create()
->method('save_settings', SaveSettingsHandler::class)
)
->build(__DIR__);Если namespace не задан — как раньше: DevCraft\Modules\{имя_каталога}\.
См. также: ModuleManifestBuilder.
Минимальная структура
Достаточно:
devcraft/src/modules/VasyaPupkinSettings/
├── manifest.php
├── SettingsPage.php # implements PageInterface / AbstractPage
├── SaveSettingsHandler.php # тонкий AJAX (по желанию)
└── templates/settings.twig # тонкий шаблон (по желанию)Не обязательны: Services/, Models/, миграции, свой settings.schema.php, свой JSON настроек.
Контракт страницы — PageInterface (обычно через AbstractPage). Меню указывает полный класс страницы.
Настройки в конфиге хоста
Минимальный модуль пишет значения в конфиг Admin (devcraft.json), ключ:
third_party.{ваш_mod}.{поле}
Хелпер ядра: DevCraft\Core\Config\ThirdPartyHostSettings::get() / ::merge().
Чужие ключи Admin и чужие third_party[*] не трогать.
Два пути установки
1. Папка на стенде (быстрая проверка)
-
Скопировать образец:
specs/010-third-party-namespaces/fixtures/vasya-pupkin-settings/
→devcraft/src/modules/VasyaPupkinSettings/ -
Точка входа:
engine/inc/vasya_pupkin_settings.php→runAdmin(moduleDir: 'VasyaPupkinSettings'). -
Зарегистрировать пункт DLE (
admin_sections.name = vasya_pupkin_settings). SQL-образец:register_admin_section.sqlв фикстуре.
2. Пакет install.xml
Тот же набор файлов + SQL регистрации секции. Состав описан в install.xml.example фикстуры (документация; zip в репозиторий Admin не кладётся).
FAQ
Нужно ли жить в DevCraft\Modules\…?
Нет. Задайте свой префикс через ->namespace(...).
Нужен ли отдельный Composer-пакет всей панели?
Нет. Регистрации PSR-4 при boot достаточно.
Куда писать настройки без своего JSON?
В third_party.{mod} конфига Admin через ThirdPartyHostSettings.
Какой контракт у страницы?
PageInterface / AbstractPage; FQCN в пункте меню манифеста.
Образец
Фикстура: specs/010-third-party-namespaces/fixtures/vasya-pupkin-settings/
Идентификаторы: mod=vasya_pupkin_settings, каталог VasyaPupkinSettings, namespace VasyaPupkin\Settings\.
Пошаговая проверка на стенде — в specs/010-third-party-namespaces/quickstart.md.