Intyrewrite - classe routeur php5 permettant l'url rewriting pour vos projets et frameworks

Soyez le premier à donner votre avis sur cette source.

Vue 5 968 fois - Téléchargée 312 fois

Description

IntyRewrite vous permet de gérer votre url rewriting côté PHP.

Le principe est simple:
Les routes sont sous forme de tableau et stockées en variable de session.

intyRewrite détecte l'url dans la barre d'adresse et compare les paramètres de l'url avec les routes prédéfinies et redirige vers le contrôlleur spécifé ou une page d'erreur ou de bienvenue, que vous pouvez personnaliser.

On peut passer de multiples paramètres dans l'url, séparé de cette sorte:
http://url+variable1+variable2

Ces variables seront passés en argument grâce à la fonction ReflectionMethod de Php.

Merci de vos contributions à cette source.

Source / Exemple :


<?php 

/** 

  • IntyRewrite
  • @author Edoaurd Kombo <edouard.kombo@live.fr>
  • /
class intyRewrite { protected $_browserURI; protected $_route; function __construct(){ $this->_browserURI = $_SERVER['REQUEST_URI']; $this->_route = $_SESSION['ROUTES']; //Your routes must be declared in an array } //If we have '/index.php' in the browser url, then we escape it, otherwise, we escape the first '/' in the url private function testURI(){ if(substr($this->_browserURI, 0, 10) == '/index.php'){ return str_replace('/index.php/' , '' , $this->_browserURI); } else { return substr($this->_browserURI, 1, 0); } } private function detectParams(){ //We detect parameters in the url $params = explode('+', $this->_browserURI); $values = (count($params) <= 1) ? null : $params ; $this->_browserURI = $params[0]; unset($values[0]); //We escape the first entry of the array return $values; } function find(){ try{ $params = $this->detectParams(); $new_uri = $this->testURI(); $allParams = ($params == null) ? array() : $params ; if((count($this->_route) == 0)){ //If there is no routes defined, we show default welcome page include ('templates/welcome/index.php'); //Replace by your personal welcome page exit(); } else { //We search if this route exists if(isset($this->_route[$new_uri])){ $directory = $this->_route[$new_uri][0]; $controllerName = $this->_route[$new_uri][1].'Controller'; $controllerPath = 'controllers/'.$controllerName.''; //Path to controller, modify it $method = $this->_route[$new_uri][2]; $file = 'projects/'.$directory.'/'.$controllerPath.'.php'; include($file); $action = new $controllerName(); $reflectionMethod = new ReflectionMethod($controllerName, $method); return $reflectionMethod->invokeArgs($action, $allParams); } else { throw new Exception(); } } } catch(Exception $e) { header ("HTTP/1.1 404 Not Found"); include (BASE_PATH.'templates/errors/error404.php'); //Custom your own 404 page exit(); } } }

Conclusion :


//Format (project name, controller name, controller method)
$routes = array(
'demo/hello' => array('demo' , 'index' , 'hello'),
'demo/test.php' => array('demo' , 'test' , 'index)'
);
$_SESSION['ROUTES'] = $routes;

//Execution
$rewrite = new intyRewrite();
$rewrite->find(); //Will find actual url in the browser and redirect to specific page or controller of your framework

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_aKheNathOn
Messages postés
575
Date d'inscription
dimanche 23 décembre 2001
Statut
Membre
Dernière intervention
23 octobre 2012
-
Je me demande pourquoi mettre les params de routage dans la session ?

Sinon vu que c'est une classe les parties extensibles doivent pouvoir être surchargées et re-déclarées style "Path to controller, modify it" ou bien "Replace by your personal welcome page" l'idée étant de surcharger ta classe et non de la modifier (en tout cas c'est le principe en POO)

L'idée d'en faire un composant est néanmoins très bonne :)

Bonne continuation,
akh

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.