Routing
Wie Nibiru URLs auf Controller, Aktionen und Parameter abbildet – einschließlich SEO-freundlicher URL-Formen.
Die Nibiru-Routing ist konventionenbasiert mit optionalen Regex-Routen aus der Datei settings.<env>.ini für besondere Fälle. Es gibt keine große Route-Datei, die gepflegt werden muss.
Die Standardskonvention
Abschnitt betitelt „Die Standardskonvention“/<controller>/<action>/<param1>/<param2>/...Beispiele:
| URL | Controller | Action | $_REQUEST |
|---|---|---|---|
/ | indexController | (none) | — |
/products | productsController | (none) | — |
/products/detail | productsController | detailAction | — |
/products/detail/42 | productsController | detailAction | id => 42 |
/users/edit/42 | usersController | editAction | id => 42 |
Ohne ein _action laufen nur navigationAction() und pageAction(). Mit _action läuft die benannte Aktion dazwischen.
SEO-URLs
Abschnitt betitelt „SEO-URLs“Nibiru erkennt SEO-freundliche URLs automatisch ohne jegliche Konfiguration. Das Muster:
/<controller>/<slug>/<numeric-id>Wenn der zweite Abschnitt kein Methodenname im Controller ist und der dritte Abschnitt numerisch ist, überarbeitet Nibiru die Anfrage intern zu:
/<controller>/detail/?id=<numeric-id>&slug=<slug>Also eine URL wie /maschine/marduk-gold-plating/42 erreicht maschineController::detailAction() mit $_REQUEST['id'] === '42' und $_REQUEST['slug'] === 'marduk-gold-plating'. Dies ist genau so, wie die Produktions-E-Commerce-Seite prod.maschinen-stockert.de saubere URLs ohne einen benutzerdefinierten Router erzeugt.
Parameter lesen
Abschnitt betitelt „Parameter lesen“Alles nach dem Aktionssegment wird zu einem $_REQUEST-Schlüssel gemäß der Position:
// /users/edit/42 → $_REQUEST['id'] = '42'public function editAction() { $id = (int) ($_REQUEST['id'] ?? 0); / ...}Für nicht-numerische oder benannte Parameter bevorzugen Sie Abfragezeichenfolgen:
/users/search?q=marduk&page=2Benutzerdefinierte Routen über INI
Abschnitt betitelt „Benutzerdefinierte Routen über INI“Der Abschnitt [NIBIRU_ROUTING] in der Datei settings.<env>.ini ermöglicht es Ihnen, Regex-URL-Muster mit Controller/Aktion-Paaren und benannten Parametern zuzuordnen:
[NIBIRU_ROUTING]; Map /api/v1/products/42 to apiController::productsAction with id=42api.v1.products.pattern = "^/api/v1/products/(\d+)$"api.v1.products.controller = "api"api.v1.products.action = "products"api.v1.products.params[] = "id"Wenn eine URL dem Muster entspricht, werden die Captured Groups den benannten params[] Schlüsseln (nach Reihenfolge) als $_REQUEST Einträge zugewiesen.
Routen-Hilfsprogramme
Abschnitt betitelt „Routen-Hilfsprogramme“Router::getInstance()->currentPage(); / 'products'Router::getInstance()->tplName(); / 'products' (controller stem for templates)Router::getInstance()->getController(); / alias for currentPage()Diese sind nützlich innerhalb von Controllern und Templates:
<a href="/products" class="{if Router::currentPage() == 'products'}active{/if}"> Products</a>(In Smarty verwenden Sie ein Smarty-Plugin oder eine vordefinierte Variable; der Helper selbst ist für PHP.)
Weiterleitung
Abschnitt betitelt „Weiterleitung“Um auf Framework-Ebene umzuleiten (setzt die richtigen HTTP-Header und beendet das Skript):
View::forwardTo('/login');Für eine JSON-Antwort (setzt Content-Type: application/json):
View::forwardToJsonHeader();View::assign(['data' => ['ok' => true]]);Dieses Muster wird von API-Endpunkten im Produktivumfeld stark verwendet – siehe den apiController in data.maschinen-stockert.de.
Paginierung-URLs
Abschnitt betitelt „Paginierung-URLs“Nibirus Pagination erwartet URLs der Form:
/<controller>/<action>/page/<N>Die Pageination-Klasse analysiert den nachfolgenden page/N-Segment, daher ist jede Routenformatierung in Ordnung, die es beibehält.
Nachfolgende Schrägstriche und Groß-/Kleinschreibung
Abschnitt betitelt „Nachfolgende Schrägstriche und Groß-/Kleinschreibung“URLs werden groß- und kleinschreibungssensitiv abgeglichen. /Users/edit und /users/edit greifen auf unterschiedliche Controller zu (der zweite existiert, der erste führt zu einem 404-Fehler). Nachfolgende Schrägstriche werden toleriert.
Häufige Fallen
Abschnitt betitelt „Häufige Fallen“- Aktionssprünge mit SEO-URL. Wenn Sie eine Methode
aboutAction()benennen und versuchen,/products/about/42als SEO-URL zu verwenden, wird die SEO-Umleitung nicht ausgelöst, daabouteine bekannte Aktion ist. Wählen Sie Slug-Namen, die nicht mit Aktionsnamen kollidieren. - Aktion ohne
_action. Einfach tippen/products/detail/ruft nichtdetailAction()auf —_actionmuss gesetzt sein. Der Dispatcher führt dies automatisch durch, wenn die URL mindestens zwei Segmente hat, aber eine abgeschnittene Abfragezeichenfolge nicht. indexist der Stammcontroller./→indexController. Es gibt keine separate “Home”-Route.