Registries
core kennt die anderen Packages nicht. Stattdessen bindet es drei Registries als Singleton – SidebarNavigation, NavbarNavigation und ModalRegistry –, und jedes Feature-Package trägt im boot() seines ServiceProviders eine View mit order und optionalem when-Guard bei. Die Shell rendert nur noch die sortierte, sichtbare Liste.
Gespeichert in der Session; ausgewertet über die when-Guards. Status:
aktiv
app/Demo/ExamplePackage/ExampleServiceProvider.php
<?php
namespace App\Demo\ExamplePackage;
use Illuminate\Support\ServiceProvider;
use Nfgarching\Core\Modals\ModalRegistry;
use Nfgarching\Core\Navigation\NavbarNavigation;
use Nfgarching\Core\Navigation\SidebarNavigation;
/**
* Pseudo-Feature-Package für die Registries-Demo. Es trägt einen Navbar-Eintrag,
* einen Sidebar-Abschnitt und ein Modal bei – genau wie ein echtes Package.
* Der when-Guard liest einen Session-Schalter, sodass sich alle drei Beiträge
* auf /core/registries live ein- und ausblenden lassen.
*/
class ExampleServiceProvider extends ServiceProvider
{
public const string SESSION_KEY = 'demo.example_package';
public function boot(): void
{
$this->loadViewsFrom(__DIR__.'/views', 'example');
$active = fn (): bool => self::active();
$this->app->make(NavbarNavigation::class)->item('example::navbar', order: 50, when: $active);
$this->app->make(SidebarNavigation::class)->section('example::sidebar', order: 20, when: $active);
$this->app->make(ModalRegistry::class)->modal('example::modal', order: 50, when: $active);
}
public static function active(): bool
{
return (bool) session(self::SESSION_KEY, true);
}
}
Ergebnis: sichtbare Einträge dieser Anfrage
NavbarNavigation::visibleItems()
-
example::navbarBeispiel-Package -
demo.navigation.navbar
SidebarNavigation::visibleSections()
-
demo.navigation.sidebar -
example::sidebarBeispiel-Package
ModalRegistry::visibleModals()
-
example::modalBeispiel-Package
Weitere Dokumentation
Dokumentation auf GitHub (docs/sidebar-navigation.md)