3.8 KiB
3.8 KiB
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:
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
# 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=<datei>: Pfad zu einer JSON-Datei mit zu generierenden Routen (überschreibt Attributerkennung)--output=<ordner>: Ausgabeverzeichnis (Standard: public/static)--exclude=<muster>: Kommagetrennte Liste von Regex-Mustern für auszuschließende Routen--all: Alle GET-Routen generieren (ignoriert #[StaticPage] Attribut)--help: Hilfe anzeigen
Programmatisch verwenden
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 Seiteprerender: 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