23-01-2026
This commit is contained in:
parent
8fd1f4d451
commit
389d5d1820
59 changed files with 9642 additions and 883 deletions
47
dev/frontend-navigation/navigation.md
Normal file
47
dev/frontend-navigation/navigation.md
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
# Routing & Navigations-Logik (KernelControllerListener)
|
||||
|
||||
Die Klasse `src/AppBundle/Listener/KernelControllerListener.php` implementiert die zentrale Routing-Logik für das CMS. Sie greift ein, wenn der Symfony-Router den Request an `AppBundle\Controller\DefaultController::defaultAction` leitet.
|
||||
|
||||
## Funktionsweise
|
||||
|
||||
Der Listener analysiert den Request-Pfad (`pathInfo`) und entscheidet, welcher Controller tatsächlich ausgeführt werden soll.
|
||||
|
||||
### 1. API-Lookup (Priorität 1)
|
||||
|
||||
Zuerst wird geprüft, ob der Pfad über einen externen API-Call (`Util::loadFromApi('cms/search', ...)`) aufgelöst werden kann.
|
||||
|
||||
- **Ziel-Controller:** `AppBundle:Cms:iqTravelGuide`
|
||||
- **Template:** `TravelGuide`
|
||||
|
||||
### 2. Datenbank-Suche (Page Entity)
|
||||
|
||||
Wenn die API nichts zurückgibt, wird in der lokalen Datenbank (`AppBundle:Page`) gesucht.
|
||||
|
||||
- **Methode A (Direkt):** Suche nach Übereinstimmung im Feld `realUrlPath`.
|
||||
- **Methode B (Tree-Traversierung):** Der Pfad wird anhand der Slashes (`/`) zerlegt. Es wird versucht, den Pfad hierarchisch über `slug` und die Eltern-Kind-Beziehung (`parent`) aufzulösen. Die anfällige Nested-Set-Logik (`lft`/`rgt`, `lvl`) wird hier bewusst umgangen, um 404-Fehler bei inkonsistenten Trees zu vermeiden.
|
||||
|
||||
### 3. Redirects
|
||||
|
||||
- **Hardcoded:** Es gibt eine Liste fester 301-Weiterleitungen (z.B. alte Reiseführer-URLs).
|
||||
- **Datenbank:** Tabelle `AppBundle:Redirect`. Wenn keine Page gefunden wird, wird hier geprüft.
|
||||
|
||||
### 4. Controller-Zuweisung
|
||||
|
||||
Sobald eine `Page`-Entität (`$node`) gefunden wurde, wird der Controller basierend auf dem Inhaltstyp bestimmt:
|
||||
|
||||
| Inhaltstyp | URL-Suffix | Controller | Action |
|
||||
| ----------------- | ------------------------- | ----------------------- | ------------------------- |
|
||||
| **TravelProgram** | `/buchen`, `/berechne...` | `AppBundle:Booking` | `index` |
|
||||
| **TravelProgram** | `/pdf` | `AppBundle:Cms` | `pdf` |
|
||||
| **TravelProgram** | _(keins)_ | `AppBundle:Cms` | `travelProgram` |
|
||||
| **FewoLodging** | `/buchen` | `AppBundle:FewoBooking` | `index` |
|
||||
| **FewoLodging** | _(keins)_ | `AppBundle:Cms` | `fewoLodging` |
|
||||
| **Standard Page** | _(keins)_ | `AppBundle:Cms` | _Dyn. nach Template-Name_ |
|
||||
|
||||
**Fallback für Standard Pages:**
|
||||
Wenn die Page ein Template (z.B. "About") definiert hat, versucht das System `AppBundle:Cms:About` aufzurufen. Existiert diese Action nicht, wird `AppBundle:Cms:Default` verwendet und der Template-Name als Parameter übergeben.
|
||||
|
||||
### 5. Fehlerbehandlung
|
||||
|
||||
- **404:** Wenn Pfad nicht gefunden und nicht in der Whitelist (`buchen`, `pdf` etc.) -> `HttpException(404)`.
|
||||
- **Inaktiv:** Wenn Page-Status `0` ist -> `NotFoundHttpException`.
|
||||
Loading…
Add table
Add a link
Reference in a new issue