Гайды
Module Identity v200.4.0
Единый источник mod и code модуля: ModuleIdentity, AbstractModuleIdentity и *Identity классы.
Зачем: строки mod / code повторяются в manifest, AdminLink, getConfig, schema. Один класс identity — один источник правды.
Два идентификатора
| Поле | Назначение | Пример Admin | Пример Notifications |
|---|---|---|---|
mod | DLE URL ?mod=…, меню, registry | devcraft | notifications |
code | JSON devcraft/config/{code}.json, FormSchema | devcraft | dle_notifications |
Часто они совпадают. У Notifications — нет: mod ≠ code.
Контракт
namespace DevCraft\Core\Interfaces;
interface ModuleIdentity {
public static function mod(): string;
public static function code(): string;
}База (наследник объявляет MODULE / CODE):
abstract class AbstractModuleIdentity implements ModuleIdentity {
public static function mod(): string { return static::MODULE; }
public static function code(): string { return static::CODE; }
}Класс модуля
Файл: devcraft/src/modules/{Dir}/{Dir}Identity.php (для dle_faker — DleFakerIdentity).
namespace DevCraft\Modules\Notifications;
use DevCraft\Core\Abstracts\AbstractModuleIdentity;
final class NotificationsIdentity extends AbstractModuleIdentity {
public const string MODULE = 'notifications';
public const string CODE = 'dle_notifications';
}Использование
use DevCraft\Modules\Notifications\NotificationsIdentity;
return ModuleManifestBuilder::create()
->mod(NotificationsIdentity::mod())
->code(NotificationsIdentity::code())
->menu([
AdminLink::page(__('Главная'), 'dashboard', DashboardPage::class, 'mif-home', NotificationsIdentity::mod()),
])
->build(__DIR__);DataManager::getConfig(NotificationsIdentity::code());
FormSchemaBuilder::create(NotificationsIdentity::code());AdminLink::page() без 5-го аргумента берёт AdminIdentity::mod() (ядро DevCraft).
Генератор
Генератор модулей создаёт {Dir}Identity.php и подставляет ::mod() / ::code() в manifest, schema и SettingsHandler.