62 lines
1.9 KiB
PHP
62 lines
1.9 KiB
PHP
|
<?php
|
||
|
namespace nur\v;
|
||
|
|
||
|
use nur\str;
|
||
|
use nur\v\base\RouteManager;
|
||
|
use nur\v\model\IPage;
|
||
|
use nur\v\model\IRouteManager;
|
||
|
|
||
|
/**
|
||
|
* Class route: gestion globale des routes
|
||
|
*/
|
||
|
class route {
|
||
|
const MANAGER_CLASS = RouteManager::class;
|
||
|
|
||
|
protected static $manager_class;
|
||
|
|
||
|
/**
|
||
|
* spécifier la classe à utiliser pour instancier le gestionnaire de routes
|
||
|
*
|
||
|
* cette méthode *doit* être appelée avant d'appeler la méthode
|
||
|
* {@link manager()}
|
||
|
*/
|
||
|
static final function set_manager_class(string $manager_class) {
|
||
|
self::$manager_class = $manager_class;
|
||
|
}
|
||
|
|
||
|
/** @var IRouteManager */
|
||
|
protected static $manager;
|
||
|
|
||
|
static final function set_manager(IRouteManager $manager) {
|
||
|
self::$manager = $manager;
|
||
|
}
|
||
|
|
||
|
/** obtenir l'instance globale de gestionnaire de route */
|
||
|
static final function manager(): IRouteManager {
|
||
|
if (self::$manager === null) {
|
||
|
$manager_class = self::$manager_class;
|
||
|
if ($manager_class === null) $manager_class = static::MANAGER_CLASS;
|
||
|
self::$manager = new $manager_class();
|
||
|
}
|
||
|
return self::$manager;
|
||
|
}
|
||
|
|
||
|
static final function __callStatic($name, $args) {
|
||
|
$name = str::us2camel($name);
|
||
|
return call_user_func_array([self::manager(), $name], $args);
|
||
|
}
|
||
|
|
||
|
#############################################################################
|
||
|
|
||
|
const MODE_EXACT = IRouteManager::MODE_EXACT;
|
||
|
const MODE_PREFIX = IRouteManager::MODE_PREFIX;
|
||
|
const MODE_PACKAGE = IRouteManager::MODE_PACKAGE;
|
||
|
const MODE_PACKAGE2 = IRouteManager::MODE_PACKAGE2;
|
||
|
|
||
|
static final function add(array ...$routes): void { self::manager()->addRoute(...$routes); }
|
||
|
static final function set_error($page): void { self::manager()->setErrorPage($page); }
|
||
|
|
||
|
static final function get_page(?string $path=null): IPage { return self::manager()->getPage($path); }
|
||
|
static final function get_path($page): string { return self::manager()->getPath($page); }
|
||
|
}
|