# Static Site Generator Diese Komponente ermöglicht die Generierung statischer HTML-Seiten aus den dynamischen Routen der Anwendung, die mit dem `#[StaticPage]` Attribut markiert sind. ## Funktionsweise Der Static Site Generator identifiziert alle Controller-Methoden, die mit dem `#[StaticPage]` Attribut markiert sind, und erzeugt für jede entsprechende Route eine statische HTML-Datei im `public/static` Verzeichnis. Die Verzeichnisstruktur wird entsprechend der URL-Struktur erstellt. ## Markieren von Routen als statische Seiten Um eine Route als statische Seite zu kennzeichnen, füge das `#[StaticPage]` Attribut zur Controller-Methode hinzu: ```php use App\Framework\Attributes\StaticPage; use App\Framework\Attributes\Route; class HomeController { #[Route('/')] #[StaticPage] public function index() { // Diese Seite wird als statische Seite generiert return new ViewResult(new HomeViewModel()); } #[Route('/about')] #[StaticPage(outputPath: 'ueber-uns')] public function about() { // Diese Seite wird mit benutzerdefiniertem Pfad generiert return new ViewResult(new AboutViewModel()); } #[Route('/dynamic-content')] public function dynamic() { // Diese Seite wird NICHT als statische Seite generiert return new ViewResult(new DynamicViewModel()); } } ``` ## Verwendung ### Über die Kommandozeile ```bash # Nur mit #[StaticPage] markierte Routen generieren (Standard) php bin/generate-static.php # Oder mit Composer composer generate-static # Alle GET-Routen generieren (ignoriert #[StaticPage] Attribut) php bin/generate-static.php --all # Mit benutzerdefinierten Optionen php bin/generate-static.php --manual-routes=config/static-routes.json --output=public/static --exclude="\/api\/.*,\/admin\/.*" ``` ### Verfügbare Optionen - `--manual-routes=`: Pfad zu einer JSON-Datei mit zu generierenden Routen (überschreibt Attributerkennung) - `--output=`: Ausgabeverzeichnis (Standard: public/static) - `--exclude=`: Kommagetrennte Liste von Regex-Mustern für auszuschließende Routen - `--all`: Alle GET-Routen generieren (ignoriert #[StaticPage] Attribut) - `--help`: Hilfe anzeigen ### Programmatisch verwenden ```php use App\Framework\StaticSite\StaticSiteGenerator; use App\Framework\StaticSite\StaticPageCollector; // Anwendung initialisieren $app = /* ... */; // Routen mit StaticPage-Attribut sammeln $router = $app->getContainer()->get(HttpRouter::class); $staticPageCollector = new StaticPageCollector($router); $routes = $staticPageCollector->collectStaticPages(); // Oder alle GET-Routen sammeln // $routes = $staticPageCollector->collectAllGetRoutes(); // Generator initialisieren $generator = new StaticSiteGenerator($app, $routes); // Optional: Ausgabeverzeichnis anpassen $generator->setOutputDirectory(__DIR__ . '/path/to/output'); // Statische Seiten generieren $generator->generate(); ``` ## Ausgabestruktur Für jede markierte Route wird eine entsprechende Datei oder Verzeichnisstruktur erstellt: - `/` → `/public/static/index.html` - `/about` → `/public/static/about/index.html` (oder benutzerdefinierter Pfad, wenn im Attribut angegeben) - `/blog/post-1` → `/public/static/blog/post-1/index.html` ## Erweitertes StaticPage-Attribut Das `#[StaticPage]` Attribut unterstützt folgende Parameter: - `outputPath`: Optionaler benutzerdefinierter Ausgabepfad für die statische Seite - `prerender`: Ob die Seite beim Deployment vorgerendert werden soll (Standard: true) ## Vorteile statischer Seiten - Verbesserte Performance durch Wegfall der dynamischen Verarbeitung - Geringere Serverlast - Einfacheres Hosting (statische Dateien können überall gehostet werden) - Verbesserte Sicherheit durch Reduzierung der Angriffsfläche - Bessere SEO durch schnellere Ladezeiten