**Routing**
Comment Nibiru mappe les URL aux contrôleurs, actions et paramètres — y compris les formes d'URL amicales pour le référencement (SEO).
Le routage de Nibiru est basé sur une convention avec des itinéraires regex optionnels à partir de settings.<env>.ini pour les cas spéciaux. Il n’y a pas de grand fichier de routes à maintenir.
La convention par défaut
Section intitulée « La convention par défaut »/<controller>/<action>/<param1>/<param2>/...Exemples :
| URL | Contrôleur | Action | $_REQUEST |
|---|---|---|---|
/ | indexController | (aucune) | — |
/produits | productsController | (aucune) | — |
/produits/detail | productsController | detailAction | — |
/produits/detail/42 | productsController | detailAction | id => 42 |
/utilisateurs/modifier/42 | usersController | editAction | id => 42 |
Sans un _action, seules les méthodes navigationAction() et pageAction() sont exécutées. Avec un _action, l’action nommée s’exécute entre elles.
SEO URLs
Section intitulée « SEO URLs »Nibiru détecte automatiquement les URL amicales pour le référencement sans aucune configuration. Le modèle :
/<controller>/<slug>/<numeric-id>Si le deuxième segment n’est pas un nom de méthode sur le contrôleur et que le troisième segment est numérique, Nibiru réécrit la requête en interne par :
/<controller>/detail/?id=<numeric-id>&slug=<slug>Donc une URL comme /maschine/marduk-gold-plating/42 atteint maschineController::detailAction() avec $_REQUEST['id'] === '42' et $_REQUEST['slug'] === 'marduk-gold-plating'. C’est exactement comment le site e-commerce de production prod.maschinen-stockert.de produit des URL propres sans un routeur personnalisé.
Lecture des paramètres
Section intitulée « Lecture des paramètres »Tout ce qui se trouve après le segment d’action devient une clé $_REQUEST par position :
// /users/edit/42 → $_REQUEST['id'] = '42'public function editAction() { $id = (int) ($_REQUEST['id'] ?? 0); / ...}Pour les paramètres non numériques ou nommés, privilégiez les chaînes de requête :
/users/search?q=marduk&page=2Routes personnalisées via INI
Section intitulée « Routes personnalisées via INI »La section [NIBIRU_ROUTING] dans settings.<env>.ini vous permet de mapper des modèles d’URL en expressions régulières aux paires contrôleur/action et aux paramètres nommés :
[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"Lorsqu’une URL correspond au modèle, les groupes capturés sont attribués aux clés nommées params[] (dans l’ordre) en tant qu’entrées $_REQUEST.
Aide aux routages
Section intitulée « Aide aux routages »Router::getInstance()->currentPage(); / 'products'Router::getInstance()->tplName(); / 'products' (controller stem for templates)Router::getInstance()->getController(); / alias for currentPage()Ces éléments sont utiles dans les contrôleurs et les modèles :
<a href="/products" class="{if Router::currentPage() == 'products'}active{/if}"> Products</a>(Dans Smarty, vous utiliseriez un plugin Smarty ou une variable pré-affectée ; l’assistant lui-même est pour PHP.)
Pour rediriger au niveau du framework (définit les en-têtes HTTP appropriés et quitte) :
View::forwardTo('/login');Pour une réponse JSON (définit Content-Type: application/json) :
View::forwardToJsonHeader();View::assign(['data' => ['ok' => true]]);Ce modèle est utilisé intensivement par les points de terminaison de l’API en production — consultez le apiController dans data.maschinen-stockert.de.
URL de pagination
Section intitulée « URL de pagination »La pagination de Nibiru attend des URL sous la forme :
/<controller>/<action>/page/<N>La classe Pageination analyse le segment de fin page/N, donc n’importe quel format de route qui le préserve est acceptable.
Barres obliques finales et casse
Section intitulée « Barres obliques finales et casse »Les URL sont comparées de manière ** sensible à la casse **. /Users/edit et /users/edit cibleront des contrôleurs différents (le deuxième existe, le premier retourne une erreur 404). Les barres obliques de fin sont tolérées.
Tracas courantes
Section intitulée « Tracas courantes »- Collision d’action avec l’URL SEO. Si vous nommez une méthode
aboutAction()et que vous essayez d’utiliser/products/about/42comme URL SEO, le réécriture SEO ne se déclenchera pas, caraboutest une action connue. Choisissez des slugs qui ne collident pas avec les noms d’action. - Action sans
_action. Taper simplement/products/detail/ne n’appellera pasdetailAction()—_actiondoit être défini. Le dispatcheur le fait automatiquement lorsque l’URL a au moins deux segments, mais une chaîne de requête strippée ne le fera pas. indexest le contrôleur racine./→indexController. Il n’y a pas de route “accueil” distincte.