mirror of
https://github.com/FreshRSS/FreshRSS.git
synced 2026-07-19 11:33:11 -04:00
Minz: remove url_rewriting
As suggested https://github.com/marienfressinaud/FreshRSS/issues/163#issuecomment-38478669 At the same time, removes a bunch of (almost) dead code such as Minz_Router (the few remaining lines being moved to Minz_FrontController to avoid a class) Contributes to https://github.com/marienfressinaud/FreshRSS/issues/303
This commit is contained in:
@@ -8,16 +8,12 @@
|
||||
* La classe ActionController représente le contrôleur de l'application
|
||||
*/
|
||||
class Minz_ActionController {
|
||||
protected $router;
|
||||
protected $view;
|
||||
|
||||
/**
|
||||
* Constructeur
|
||||
* @param $controller nom du controller
|
||||
* @param $action nom de l'action à lancer
|
||||
*/
|
||||
public function __construct ($router) {
|
||||
$this->router = $router;
|
||||
public function __construct () {
|
||||
$this->view = new Minz_View ();
|
||||
$this->view->attributeParams ();
|
||||
}
|
||||
|
||||
@@ -30,7 +30,6 @@ class Minz_Configuration {
|
||||
* définition des variables de configuration
|
||||
* $salt une chaîne de caractères aléatoires (obligatoire)
|
||||
* $environment gère le niveau d'affichage pour log et erreurs
|
||||
* $use_url_rewriting indique si on utilise l'url_rewriting
|
||||
* $base_url le chemin de base pour accéder à l'application
|
||||
* $title le nom de l'application
|
||||
* $language la langue par défaut de l'application
|
||||
@@ -43,7 +42,6 @@ class Minz_Configuration {
|
||||
private static $salt = '';
|
||||
private static $environment = Minz_Configuration::PRODUCTION;
|
||||
private static $base_url = '';
|
||||
private static $use_url_rewriting = false;
|
||||
private static $title = '';
|
||||
private static $language = 'en';
|
||||
private static $default_user = '';
|
||||
@@ -90,9 +88,6 @@ class Minz_Configuration {
|
||||
public static function baseUrl () {
|
||||
return self::$base_url;
|
||||
}
|
||||
public static function useUrlRewriting () {
|
||||
return self::$use_url_rewriting;
|
||||
}
|
||||
public static function title () {
|
||||
return self::$title;
|
||||
}
|
||||
@@ -176,7 +171,6 @@ class Minz_Configuration {
|
||||
$ini_array = array(
|
||||
'general' => array(
|
||||
'environment' => self::environment(true),
|
||||
'use_url_rewriting' => self::$use_url_rewriting,
|
||||
'salt' => self::$salt,
|
||||
'base_url' => self::$base_url,
|
||||
'title' => self::$title,
|
||||
@@ -262,9 +256,6 @@ class Minz_Configuration {
|
||||
if (isset ($general['base_url'])) {
|
||||
self::$base_url = $general['base_url'];
|
||||
}
|
||||
if (isset ($general['use_url_rewriting'])) {
|
||||
self::$use_url_rewriting = $general['use_url_rewriting'];
|
||||
}
|
||||
|
||||
if (isset ($general['title'])) {
|
||||
self::$title = $general['title'];
|
||||
|
||||
@@ -16,26 +16,18 @@ class Minz_Dispatcher {
|
||||
private static $instance = null;
|
||||
private static $needsReset;
|
||||
|
||||
private $router;
|
||||
private $controller;
|
||||
|
||||
/**
|
||||
* Récupère l'instance du Dispatcher
|
||||
*/
|
||||
public static function getInstance ($router) {
|
||||
public static function getInstance () {
|
||||
if (self::$instance === null) {
|
||||
self::$instance = new Minz_Dispatcher ($router);
|
||||
self::$instance = new Minz_Dispatcher ();
|
||||
}
|
||||
return self::$instance;
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructeur
|
||||
*/
|
||||
private function __construct ($router) {
|
||||
$this->router = $router;
|
||||
}
|
||||
|
||||
/**
|
||||
* Lance le controller indiqué dans Request
|
||||
* Remplit le body de Response à partir de la Vue
|
||||
@@ -58,7 +50,7 @@ class Minz_Dispatcher {
|
||||
$this->controller->lastAction ();
|
||||
|
||||
if (!self::$needsReset) {
|
||||
echo $this->controller->view ()->build ();
|
||||
$this->controller->view ()->build ();
|
||||
}
|
||||
} catch (Minz_Exception $e) {
|
||||
throw $e;
|
||||
@@ -90,7 +82,7 @@ class Minz_Dispatcher {
|
||||
Minz_Exception::ERROR
|
||||
);
|
||||
}
|
||||
$this->controller = new $controller_name ($this->router);
|
||||
$this->controller = new $controller_name ();
|
||||
|
||||
if (! ($this->controller instanceof Minz_ActionController)) {
|
||||
throw new Minz_ControllerNotActionControllerException (
|
||||
|
||||
@@ -24,11 +24,10 @@
|
||||
*/
|
||||
class Minz_FrontController {
|
||||
protected $dispatcher;
|
||||
protected $router;
|
||||
|
||||
/**
|
||||
* Constructeur
|
||||
* Initialise le router et le dispatcher
|
||||
* Initialise le dispatcher, met à jour la Request
|
||||
*/
|
||||
public function __construct () {
|
||||
if (LOG_PATH === false) {
|
||||
@@ -40,24 +39,46 @@ class Minz_FrontController {
|
||||
|
||||
Minz_Request::init ();
|
||||
|
||||
$this->router = new Minz_Router ();
|
||||
$this->router->init ();
|
||||
} catch (Minz_RouteNotFoundException $e) {
|
||||
Minz_Log::record ($e->getMessage (), Minz_Log::ERROR);
|
||||
Minz_Error::error (
|
||||
404,
|
||||
array ('error' => array ($e->getMessage ()))
|
||||
$url = $this->buildUrl();
|
||||
$url['params'] = array_merge (
|
||||
$url['params'],
|
||||
Minz_Request::fetchPOST ()
|
||||
);
|
||||
Minz_Request::forward ($url);
|
||||
} catch (Minz_Exception $e) {
|
||||
Minz_Log::record ($e->getMessage (), Minz_Log::ERROR);
|
||||
$this->killApp ($e->getMessage ());
|
||||
}
|
||||
|
||||
$this->dispatcher = Minz_Dispatcher::getInstance ($this->router);
|
||||
$this->dispatcher = Minz_Dispatcher::getInstance();
|
||||
}
|
||||
|
||||
/**
|
||||
* Démarre l'application (lance le dispatcher et renvoie la réponse
|
||||
* Retourne un tableau représentant l'url passée par la barre d'adresses
|
||||
* @return tableau représentant l'url
|
||||
*/
|
||||
private function buildUrl() {
|
||||
$url = array ();
|
||||
|
||||
$url['c'] = Minz_Request::fetchGET (
|
||||
'c',
|
||||
Minz_Request::defaultControllerName ()
|
||||
);
|
||||
$url['a'] = Minz_Request::fetchGET (
|
||||
'a',
|
||||
Minz_Request::defaultActionName ()
|
||||
);
|
||||
$url['params'] = Minz_Request::fetchGET ();
|
||||
|
||||
// post-traitement
|
||||
unset ($url['params']['c']);
|
||||
unset ($url['params']['a']);
|
||||
|
||||
return $url;
|
||||
}
|
||||
|
||||
/**
|
||||
* Démarre l'application (lance le dispatcher et renvoie la réponse)
|
||||
*/
|
||||
public function run () {
|
||||
try {
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
<?php
|
||||
class Minz_RouteNotFoundException extends Minz_Exception {
|
||||
private $route;
|
||||
|
||||
public function __construct ($route, $code = self::ERROR) {
|
||||
$this->route = $route;
|
||||
|
||||
$message = 'Route `' . $route . '` not found';
|
||||
|
||||
parent::__construct ($message, $code);
|
||||
}
|
||||
|
||||
public function route () {
|
||||
return $this->route;
|
||||
}
|
||||
}
|
||||
@@ -1,209 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* MINZ - Copyright 2011 Marien Fressinaud
|
||||
* Sous licence AGPL3 <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
/**
|
||||
* La classe Router gère le routage de l'application
|
||||
* Les routes sont définies dans APP_PATH.'/configuration/routes.php'
|
||||
*/
|
||||
class Minz_Router {
|
||||
const ROUTES_PATH_NAME = '/configuration/routes.php';
|
||||
|
||||
private $routes = array ();
|
||||
|
||||
/**
|
||||
* Constructeur
|
||||
* @exception FileNotExistException si ROUTES_PATH_NAME n'existe pas
|
||||
* et que l'on utilise l'url rewriting
|
||||
*/
|
||||
public function __construct () {
|
||||
if (Minz_Configuration::useUrlRewriting ()) {
|
||||
if (file_exists (APP_PATH . self::ROUTES_PATH_NAME)) {
|
||||
$routes = include (
|
||||
APP_PATH . self::ROUTES_PATH_NAME
|
||||
);
|
||||
|
||||
if (!is_array ($routes)) {
|
||||
$routes = array ();
|
||||
}
|
||||
|
||||
$this->routes = array_map (
|
||||
array ('Url', 'checkUrl'),
|
||||
$routes
|
||||
);
|
||||
} else {
|
||||
throw new Minz_FileNotExistException (
|
||||
self::ROUTES_PATH_NAME,
|
||||
Minz_Exception::ERROR
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialise le Router en déterminant le couple Controller / Action
|
||||
* Mets à jour la Request
|
||||
* @exception RouteNotFoundException si l'uri n'est pas présente dans
|
||||
* > la table de routage
|
||||
*/
|
||||
public function init () {
|
||||
$url = array ();
|
||||
|
||||
if (Minz_Configuration::useUrlRewriting ()) {
|
||||
try {
|
||||
$url = $this->buildWithRewriting ();
|
||||
} catch (Minz_RouteNotFoundException $e) {
|
||||
throw $e;
|
||||
}
|
||||
} else {
|
||||
$url = $this->buildWithoutRewriting ();
|
||||
}
|
||||
|
||||
$url['params'] = array_merge (
|
||||
$url['params'],
|
||||
Minz_Request::fetchPOST ()
|
||||
);
|
||||
|
||||
Minz_Request::forward ($url);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retourne un tableau représentant l'url passée par la barre d'adresses
|
||||
* Ne se base PAS sur la table de routage
|
||||
* @return tableau représentant l'url
|
||||
*/
|
||||
public function buildWithoutRewriting () {
|
||||
$url = array ();
|
||||
|
||||
$url['c'] = Minz_Request::fetchGET (
|
||||
'c',
|
||||
Minz_Request::defaultControllerName ()
|
||||
);
|
||||
$url['a'] = Minz_Request::fetchGET (
|
||||
'a',
|
||||
Minz_Request::defaultActionName ()
|
||||
);
|
||||
$url['params'] = Minz_Request::fetchGET ();
|
||||
|
||||
// post-traitement
|
||||
unset ($url['params']['c']);
|
||||
unset ($url['params']['a']);
|
||||
|
||||
return $url;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retourne un tableau représentant l'url passée par la barre d'adresses
|
||||
* Se base sur la table de routage
|
||||
* @return tableau représentant l'url
|
||||
* @exception RouteNotFoundException si l'uri n'est pas présente dans
|
||||
* > la table de routage
|
||||
*/
|
||||
public function buildWithRewriting () {
|
||||
$url = array ();
|
||||
$uri = Minz_Request::getURI ();
|
||||
$find = false;
|
||||
|
||||
foreach ($this->routes as $route) {
|
||||
$regex = '*^' . $route['route'] . '$*';
|
||||
if (preg_match ($regex, $uri, $matches)) {
|
||||
$url['c'] = $route['controller'];
|
||||
$url['a'] = $route['action'];
|
||||
$url['params'] = $this->getParams (
|
||||
$route['params'],
|
||||
$matches
|
||||
);
|
||||
$find = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!$find && $uri != '/') {
|
||||
throw new Minz_RouteNotFoundException (
|
||||
$uri,
|
||||
Minz_Exception::ERROR
|
||||
);
|
||||
}
|
||||
|
||||
// post-traitement
|
||||
$url = Minz_Url::checkUrl ($url);
|
||||
|
||||
return $url;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retourne l'uri d'une url en se basant sur la table de routage
|
||||
* @param l'url sous forme de tableau
|
||||
* @return l'uri formatée (string) selon une route trouvée
|
||||
*/
|
||||
public function printUriRewrited ($url) {
|
||||
$route = $this->searchRoute ($url);
|
||||
|
||||
if ($route !== false) {
|
||||
return $this->replaceParams ($route, $url['params']);
|
||||
}
|
||||
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Recherche la route correspondante à une url
|
||||
* @param l'url sous forme de tableau
|
||||
* @return la route telle que spécifiée dans la table de routage,
|
||||
* false si pas trouvée
|
||||
*/
|
||||
public function searchRoute ($url) {
|
||||
foreach ($this->routes as $route) {
|
||||
if ($route['controller'] == $url['c']
|
||||
&& $route['action'] == $url['a']) {
|
||||
// calcule la différence des tableaux de params
|
||||
$params = array_flip ($route['params']);
|
||||
$difference_params = array_diff_key (
|
||||
$params,
|
||||
$url['params']
|
||||
);
|
||||
|
||||
// vérifie que pas de différence
|
||||
// et le cas où $params est vide et pas $url['params']
|
||||
if (empty ($difference_params)
|
||||
&& (!empty ($params) || empty ($url['params']))) {
|
||||
return $route;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Récupère un tableau dont
|
||||
* - les clés sont définies dans $params_route
|
||||
* - les valeurs sont situées dans $matches
|
||||
* Le tableau $matches est décalé de +1 par rapport à $params_route
|
||||
*/
|
||||
private function getParams($params_route, $matches) {
|
||||
$params = array ();
|
||||
|
||||
for ($i = 0; $i < count ($params_route); $i++) {
|
||||
$param = $params_route[$i];
|
||||
$params[$param] = $matches[$i + 1];
|
||||
}
|
||||
|
||||
return $params;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remplace les éléments de la route par les valeurs contenues dans $params
|
||||
*/
|
||||
private function replaceParams ($route, $params_replace) {
|
||||
$uri = $route['route'];
|
||||
$params = array();
|
||||
foreach($route['params'] as $param) {
|
||||
$uri = preg_replace('#\((.+)\)#U', $params_replace[$param], $uri, 1);
|
||||
}
|
||||
|
||||
return stripslashes($uri);
|
||||
}
|
||||
}
|
||||
@@ -5,8 +5,7 @@
|
||||
*/
|
||||
class Minz_Url {
|
||||
/**
|
||||
* Affiche une Url formatée selon que l'on utilise l'url_rewriting ou non
|
||||
* si oui, on cherche dans la table de routage la correspondance pour formater
|
||||
* Affiche une Url formatée
|
||||
* @param $url l'url à formater définie comme un tableau :
|
||||
* $url['c'] = controller
|
||||
* $url['a'] = action
|
||||
@@ -39,13 +38,7 @@ class Minz_Url {
|
||||
}
|
||||
|
||||
if ($isArray) {
|
||||
$router = new Minz_Router ();
|
||||
|
||||
if (Minz_Configuration::useUrlRewriting ()) {
|
||||
$url_string .= $router->printUriRewrited ($url);
|
||||
} else {
|
||||
$url_string .= self::printUri ($url, $encodage);
|
||||
}
|
||||
$url_string .= self::printUri ($url, $encodage);
|
||||
} else {
|
||||
$url_string .= $url;
|
||||
}
|
||||
@@ -54,7 +47,7 @@ class Minz_Url {
|
||||
}
|
||||
|
||||
/**
|
||||
* Construit l'URI d'une URL sans url rewriting
|
||||
* Construit l'URI d'une URL
|
||||
* @param l'url sous forme de tableau
|
||||
* @param $encodage pour indiquer comment encoder les & (& ou & pour html)
|
||||
* @return l'uri sous la forme ?key=value&key2=value2
|
||||
|
||||
@@ -228,7 +228,6 @@ function saveStep3 () {
|
||||
$ini_array = array(
|
||||
'general' => array(
|
||||
'environment' => empty($_SESSION['environment']) ? 'production' : $_SESSION['environment'],
|
||||
'use_url_rewriting' => false,
|
||||
'salt' => $_SESSION['salt'],
|
||||
'base_url' => '',
|
||||
'title' => $_SESSION['title'],
|
||||
|
||||
Reference in New Issue
Block a user