80 lines
2.8 KiB
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;
|
|
}
|