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); }
 | 
						|
}
 |