Problème avec un système de routes

Résolu/Fermé
blaz32 Messages postés 155 Date d'inscription jeudi 27 juin 2013 Statut Membre Dernière intervention 28 août 2014 - Modifié par blaz32 le 5/01/2014 à 20:32
blaz32 Messages postés 155 Date d'inscription jeudi 27 juin 2013 Statut Membre Dernière intervention 28 août 2014 - 7 janv. 2014 à 18:43
Voici le code mon Router :

<?php

class Router{

static $routes = array();
static $prefixes = array();

static function prefix($url,$prefix){
self::$prefixes[$url] = $prefix;
}

/**
* Permet de parser une url.
* @param $url URL à parser.
* @return tableau contenant les paramètres.
*/

static function parse($url, $request){

$url = trim($url, '/');
if(empty($url)){
$url = Router::$routes[0]['url'];
}else{
$match = false;
foreach(Router::$routes as $v){
if(!$match && preg_match($v['redirreg'],$url,$match)){
$url = $v['origin'];
foreach($match as $k=>$v){
$url = str_replace(':'.$k.':', $v, $url);
}
$match = true;
}
}
}

$params = explode('/',$url);
if(in_array($params[0],array_keys(self::$prefixes))){
$request->prefix = self::$prefixes[$params[0]];
array_shift($params);

}
$request->controller = $params[0];
$request->action = isset($params[1]) ? $params[1] : 'index';
$request->params = array_slice($params, 2);
return true;

}

/**
* Permet de connecter une url à une action particulière
**/
static function connect($redir, $url){
$r = array();
$r['params'] = array();
$r['url'] = $url;

$r['originreg'] = preg_replace('/([a-z0-9]+):([*\/]+)/','${1}:(?P<${1}>${2})', $url);
$r['originreg'] = str_replace('/*','(?P<args>/?.*)', $r['originreg']);
$r['originreg'] = '/^'.str_replace('/', '\/', $r['originreg']).'$/';
//MODIF
$r['origin'] = preg_replace('/([a-z0-9]+):([^\/]+)/', ':${1}:', $url);
$r['origin'] = str_replace('/*', ':args:', $r['origin']);

$params = explode('/',$url);
foreach($params as $k=>$v){
if(strpos($v, ':')){
$p = explode(':', $v);
$r['params'][$p[0]] = $p[1];
}
}

$r['redirreg'] = $redir;
$r['redirreg'] = str_replace('/*', '(?P<args>/?.*)', $r['redirreg']);
foreach($r['params'] as $k=>$v){
$r['redirreg'] = str_replace(":$k", "(?P<$k>$v", $r['redirreg']);
}
$r['regireg'] = '/^'.str_replace('/', '\/', $r['redirreg']).'$/';

$r['redir'] = preg_replace('/:([a-z0-9]+)/', ':${1}:', $redir);
$r['redir'] = str_replace('/*', ':args:', $r['redir']);

self::$routes[] = $r;
}

/**
* Permet de générer une url à partir d'une url originale
* controller/action(/:param/:param/:param...)
**/
static function url($url = ''){
trim($url, '/');
foreach(self::$routes as $v){
if(preg_match($v['originreg'], $url, $match)){
$url = $v['redir'];
foreach($match as $k=>$w){
$url = str_replace(":$k:", $w, $url);
}
}
}
foreach(self::$prefixes as $k=>$v){
if(strpos($url, $v) === 0){
$url = str_replace($v, $k, $url);
}
}
return BASE_URL.'/'.$url;
}



}

?>

Mais quand je vais sur une page, j'obtient les erreur "Warning: preg_match() [function.preg-match]: No ending delimiter '/' found in C:\Users\Perso\Documents\wamp\www\site\core\Router.php on line 26" et "Warning: preg_match() [function.preg-match]: Delimiter must not be alphanumeric or backslash in C:\Users\Perso\Documents\wamp\www\site\core\Router.php on line 26"

Je n'arrive pas à trouver le problème et j'aurais besoin d'aide ^^

Merci d'avance pour vos réponses ^^

2 réponses

blaz32 Messages postés 155 Date d'inscription jeudi 27 juin 2013 Statut Membre Dernière intervention 28 août 2014 10
7 janv. 2014 à 00:45
Personne :(
0
blaz32 Messages postés 155 Date d'inscription jeudi 27 juin 2013 Statut Membre Dernière intervention 28 août 2014 10
7 janv. 2014 à 18:43
J'ai réglé un problème, mais wamp me dit :
Warning: preg_match() [function.preg-match]: No ending delimiter '/' found in ...

J'ai vraiment besoin d'aide, mais je ne vois pas à quoi est dû cette erreur !
HELP !!!
0