Bonjour à tous,
De nouveau souci dans le tuto jour 4 à 48 min 44:
J'ai encodé dans le fichier router:
<?php
class router{
static $routes=array();
/**
* Permet de parser une url
* @param $url Url à parser
* @return tableau contenant les paramètres
**/
static function parse($url,$request)
{
$url = trim($url,'/');
$params = explode('/',$url);
$request->controller = $params[0];
$request->action = isset($params[1]) ? $params[1]:'index';
$request->params = array_slice($params,2);
return true;
}
/**
* Connect
**/
static function connect($redir,$url)
{
$r = array();
$r'origin']='/'.str_replace('/','\/',$url).'/';
$r'origin']= preg_replace('/([a-z0-9]+):(^\/]+)/','${1}:(?P<${1}>${2})',$r'origin']);
self::$routes]=$r;
debug($r);
}
/**
*
**/
static function url($url)
{
foreach(self::$routes as $v)
{
if(preg_match($v'origin'],$url,$match))
{
debug($match);
}
}
return $url;
}
}
?>
Dans conf
<?php
class conf
{
static $debug = 1;
static $databases = array('default' => array( 'host' => 'localhost',
'database' => 'asduo',
'login'=> 'root',
'password' => ''
)
);
}
Router::connect('post/:slug-:id','posts/view/id:([0-9]+)/slug:([a-z0-9\-]+)');
?>
Donc sur mon site j'obtiens pour le 1er debug:
Array
(
[origin] => /posts\/view\/id:(?P([0-9]+)\)/slug:(?P([a-z0-9\-]+))/
)
Alors que je dois obtenir:
Array
(
[origin] => /posts\/view\/id:(?P([0-9]+)\/slug:(?P([a-z0-9\-]+))/
)
Donc souci, une parenthèe apparaît.
De plus, Le deuxième debug ne donne plus rien.
Si j'enlève la ligne:
$r'origin']= preg_replace('/([a-z0-9]+):(^\/]+)/','${1}:(?P<${1}>${2})',$r'origin']);
Alors mon debug fonctionne et j'obtiens:
Array
(
[0] => posts/view/id:5/slug:premier-article
[1] => 5
[2] => premier-article
)
Ce qui correspond au tuto.
Cela doit être encore une bétise mais j'ai relu relu relu et pas moyen de trouver.
Merci.