PluginBootResult
What a {@see PluginBootStrategyInterface} reports back to the kernel: the instantiated plugins (vetoed ones included), the names that actually booted, and the routes/commands the phase collected. Routes feed the kernel's {@see \Milpa\Http\Routing\Router}; both lists default to empty because host strategies may assemble routes outside the kernel (attribute scanning is a host concern, never a kernel one).
PluginBootResult::__construct()
public function __construct(array $plugins, array $bootedPluginNames, array $routes = [], array $commands = [], bool $emittedKernelBooted = false):Parameters
| Name | Type | Description |
|---|---|---|
| $plugins | list<object> | |
| $bootedPluginNames | list<string> | |
| $routes | list<\Milpa\Http\Routing\Route> | |
| $commands | list<\Milpa\Command\Operation> | |
| $emittedKernelBooted | bool | Set by the STRATEGY (never the kernel itself) to `true` when the delegated boot cycle it just ran already dispatched `kernel.booted` on `BootContext::$dispatcher` — e.g. {@see PluginsManagerBootStrategy}, whose underlying `PluginsManager::loadPlugins()` emits it itself. `Kernel::boot()` reads this flag to skip its own final dispatch, so listeners always see `kernel.booted` exactly ONCE per boot, never twice. Defaults to `false` (BC): every strategy that does not set it — {@see InlinePluginBootStrategy} included — keeps the kernel's own emission, byte-identical to the pre-flag behavior. |