Zum Inhalt springen
Nibiru docsv0.9.2

Routing

Wie Nibiru URLs auf Controller, Aktionen und Parameter abbildet – einschließlich SEO-freundlicher URL-Formen.

Stable Reading time ~ 2 min Edit on GitHub

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.

/<controller>/<action>/<param1>/<param2>/...

Beispiele:

URLControllerAction$_REQUEST
/indexController(none)
/productsproductsController(none)
/products/detailproductsControllerdetailAction
/products/detail/42productsControllerdetailActionid => 42
/users/edit/42usersControllereditActionid => 42

Ohne ein _action laufen nur navigationAction() und pageAction(). Mit _action läuft die benannte Aktion dazwischen.

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.

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=2

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=42
api.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.

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.)

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.

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.

  • Aktionssprünge mit SEO-URL. Wenn Sie eine Methode aboutAction() benennen und versuchen, /products/about/42 als SEO-URL zu verwenden, wird die SEO-Umleitung nicht ausgelöst, da about eine bekannte Aktion ist. Wählen Sie Slug-Namen, die nicht mit Aktionsnamen kollidieren.
  • Aktion ohne _action. Einfach tippen /products/detail/ ruft nicht detailAction() auf — _action muss gesetzt sein. Der Dispatcher führt dies automatisch durch, wenn die URL mindestens zwei Segmente hat, aber eine abgeschnittene Abfragezeichenfolge nicht.
  • index ist der Stammcontroller. /indexController. Es gibt keine separate “Home”-Route.