DevCraft Документации
Гайды

Module Identity v200.4.0

Единый источник mod и code модуля: ModuleIdentity, AbstractModuleIdentity и *Identity классы.

Зачем: строки mod / code повторяются в manifest, AdminLink, getConfig, schema. Один класс identity — один источник правды.

Два идентификатора

ПолеНазначениеПример AdminПример Notifications
modDLE URL ?mod=…, меню, registrydevcraftnotifications
codeJSON devcraft/config/{code}.json, FormSchemadevcraftdle_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_fakerDleFakerIdentity).

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.

См. также

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