AdminPlugin
El panel de administración de Milpa: la superficie `/milpa/admin`. {@see Controllers\MilpaAdminController} es el Hub (ADR#12): descubre las secciones registradas vía {@see AdminSectionProvider} y redirige a la default, sin renderizar nada él mismo. Cada sección es dueña de su ruta, su gate y su render; el panel no conoce ninguna por nombre. Este plugin aporta tres: **Settings** (la configuración del sitio, con form y CSRF), **Plugins** (qué plugins tiene el host y cuáles arrancan, sobre las operaciones de `milpa/plugin`) y **Sistema** (la tabla de rutas, read-only). Cualquier otro plugin puede aportar las suyas implementando {@see AdminSectionProvider} — el panel las descubre y las pinta en la navegación sin cambiar una línea de aquí. **Lo que un host tiene que darle:** un `SessionStore` y el middleware de scopes de `milpa/auth` (el gate vive detrás de `milpa.admin`), un `PluginRegistryInterface` si quiere la sección de plugins, y un {@see RouteTableSource} si quiere la de Sistema. Lo que no registre, simplemente no aparece — el panel no truena por una sección que este host no puede servir.
AdminPlugin::__construct()
public function __construct(Milpa\Interfaces\Di\DIContainerInterface $container):Parameters
| Name | Type | Description |
|---|---|---|
| $container | Milpa\Interfaces\Di\DIContainerInterface |
AdminPlugin::routes()
public function routes(): arrayLas rutas del panel, declaradas y ya atadas a su handler. Explícitas y no escaneadas de atributos: escanear obliga a un host a traer un cargador de atributos, y la familia no publica ninguno — era justo lo que amarraba este panel a un host. Con seis rutas, decirlas cuesta menos que la maquinaria para adivinarlas, y se leen todas de un jalón en un archivo.
AdminPlugin::adminSections()
public function adminSections(): arrayLas secciones propias del plugin (ui.admin.section — ADR#12): Settings (order 10), la primera del admin; Plugins (order 15, justo después — el 20 ya es de `architecture`) — qué plugins tiene el host y cuáles arrancan, sobre las operaciones de `milpa/plugin`, que sirve {@see Controllers\PluginsController}; y Sistema (order 30, P5.7) — la tabla read-only de rutas registradas que sirve {@see Controllers\SystemController}.
AdminPlugin::adminSectionStates()
public function adminSectionStates(): arrayEl estado de las secciones propias del plugin (settings + plugins + system) — el MISMO que el shell web consume, ahora disponible para el shell CLI (`coa:admin`). `architecture` es web-only (sin estado inspectable), así que no aparece aquí. El estado de `system` son las rutas registradas, leídas de la fuente de verdad ({@see RouteTableAssembler}, la autoridad única registrada como instancia en el container tras `loadPlugins()` — Ola 4d.3a).
AdminPlugin::boot()
public function boot(): voidLo único que arranca: atar la raíz de almacenamiento que el host haya registrado. Si no registró ninguna, no se ata nada y {@see SettingsStore::path()} lanza cuando alguien intente leer o escribir settings — con el nombre del puerto que falta. Callar aquí y adivinar allá es cómo el panel terminó escribiendo dentro de `vendor/`.
AdminPlugin::install()
public function install(): voidNada que instalar: el panel no tiene datos propios.
AdminPlugin::uninstall()
public function uninstall(): voidNada que desinstalar: quitar el panel no toca lo que el panel administra.
AdminPlugin::enable()
public function enable(): voidNada que prender: las secciones aparecen porque el panel las descubrió.
AdminPlugin::disable()
public function disable(): voidNada que apagar.