Bonjour à tous,
mon site marche très bien jusqu'au dernier chapitre qu'on me conseille de faire une petite modification sur le fichier Router.php.
J'ai bien corrigé les erreurs de frappe. Il n'y a pas d'erreur mais j'arrive plus à me connecter sur mon site.
[code]<?php
class Router {
static $routes = array();
static $prefixes = array();
/*
* Ajoute un prefix au Routing
*/
static function prefix($url, $prefix) {
self::$prefixes[$url] = $prefix;
}
/*
* Permet de parser une url
* @param $url URL a parser
* $return tableau contenant les parametres
*/
static function parse($url, $request) {
$url = trim($url, '/');
$url = trim($url, 'R');
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); // sauter 2 premiers elements
return true;
}
/*
* Permet de connecter une url à une action particulere
*/
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']) . '$/';
$r['origin'] = preg_replace('/:([a-z0-9]+):([^\/]+)/',':${1}:', $url);
$r['originreg'] = 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['redirreg'] = '/^' . str_replace('/', '\/', $r['redirreg']) . '$/';
$r['redir'] = preg_replace('/:([a-z0-9]+)/', ':${1}:', $redir);
$r['redir'] = str_replace('/*', ':args:', $r['redir']);
//debug($redir);die();
self::$routes[] = $r;
//debug($r);die();
}
/*
* Permet de generer une url a partir d'une url originale
* controller/action(/:param/:param/:param...)
*
*/
static function url($url = '') {
trim($url, '/');
//debug(self::$routes);die();
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;
}
}
?>
[/code]
Voici le message d'erreur
( ! ) Warning: preg_match() [
function.preg-match
]: Delimiter must not be alphanumeric or backslash in C:\wamp\www\Projet\core\Router.php on line 101 Call Stack #TimeMemoryFunctionLocation 10.0004373952{main}( )..\index.php:0 20.0058569200Dispatcher->__construct( )..\index.php:11 30.0863625136Controller->render( )..\Dispatcher.php:27 40.0892649416require( 'C:\wamp\www\Projet\view\layout\default.php' )..\Controller.php:42 50.0916662136Router::url( )..\default.php:27 60.0916662200
preg_match
( )..\Router.php:101
Si vous voyez les erreurs ou vous avez une solution
Merci de repondre à ce sujet.