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

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

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.