nur-sery/nur_src/v/model/IRouteManager.php

80 lines
2.8 KiB
PHP

<?php
namespace nur\v\model;
/**
* Interface IRouteManager: interface pour un gestionnaire de routes
*/
interface IRouteManager {
/** @var int indique que la correspondance du chemin doit être exacte */
const MODE_EXACT = 0;
/**
* @var int indique que la correspondance du chemin se fait sur le préfixe
* par exemple:
* - 'index.php' matche 'index.php' et 'index.php/suffix'
* - 'path/to/' matche 'path/to/index.php' et 'path/to/menu.php'",
* si le chemin ne se termine pas par '/', une correspondance exacte est
* automatiquement rajoutée
* contraiement à {@link MODE_PACKAGE}, quel que soit le chemin matché, c'est
* toujours la même page qui prend en charge le chemin
*/
const MODE_PREFIX = 1;
/**
* @var int indique que la correspondance du chemin se fait sur le préfixe, et
* que la classe associée est calculée automatiquement en cherchant à partir
* d'un package spécifié. par exemple:
* - si on a [path]="prefix/" et [page]="package\\Class"
* - alors 'prefix/index.php' est pris en charge par package\IndexPage
* - et 'prefix/sub/do-it.php' est pris en charge par package\sub\DoItPage
* si le chemin ne se termine pas par '/', une correspondance exacte est
* automatiquement rajoutée
*/
const MODE_PACKAGE = 2;
/**
* @var int comme {@link MODE_PACKAGE} mais en utilisant '--' au lieu de '/'
*/
const MODE_PACKAGE2 = 3;
const ROUTE_SCHEMA = [
"path" => [null, null, "chemin vers la page", "required" => true],
"page" => [null, null, "classe ou instance de IPage associée", "required" => true],
"mode" => [null, self::MODE_EXACT, "mode de correspondance du chemin"],
"aliases" => [null, null, "ensemble de chemins qui sont des aliases de path",
"help" => "la correspondance sur les aliases est toujours exacte, quel que soit le mode sélectionné",
],
"cons_args" => [null, null, "(interne) arguments pour instancier la classe"],
"package" => [null, null, "(interne) package correspondant à [page]"],
];
/**
* ajouter une nouvelle route. $routes est une liste d'éléments conformes au
* schéma {@link ROUTE_SCHEMA}
*/
function addRoute(array ...$routes): void;
/**
* spécifier la page par défaut si aucune route ne correspond
*
* @param string|IPage|array
*/
function setErrorPage($page);
/**
* obtenir une instance de {@link IPage} correspondant au chemin spécifié e.g
* '/index.php'
*
* si $path===null, prendre le chemin courant i.e "$php_self.$path_info"
*/
function getPage(?string $path=null): IPage;
/**
* obtenir le chemin correspondant à la page spécifiée.
*
* $page peut être une classe qui implémente {@link IPage} ou une instance de
* {@link IPage}
*/
function getPath($page): string;
}