Salut, c'est encore moi. Et oui j'ai encore un souci. Un souci bête sans doute, mais après une matinée à cherché à débugger je viens vous demander un peu d'aide :D
Je vous expliques le souci. Normalement quand je clique sur le lien, il doit me rediriger vers :
post/bienvenue-sur-mon-site-5
Sauf qu'il me redirige vers :
post/:slug-:id
C'est bizarre parce que j'ai l'impression que mon routing ne fonctionne pas et qu'il me renvoie la valeur telle quelle :/
Fichier Conf:
<?php
class Conf
{
static $debug = 1;
static $databases = array(
'default' => array(
'host' => 'localhost',
'database' => 'e-time',
'login' => 'root',
'password' => ''
)
);
}
Router::connect('post/:slug-:id', 'posts/view/id:([0-9]+)/slug:([a-z0-9\-]+)');
Fichier Router.php:
<?php
class Router
{
static $routes = array();
/**
* Permet de parser une url
* @param $url Url à parser
* @return array 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] :'view';
$request->params = array_slice($params, 2);
return true;
}
static function connect($redir, $url)
{
$r = array();
$r'redir'] = $redir;
$r'origin'] = preg_replace('/([a-z0-9]+):(^\/]+)/', '${1}:(?P<${1}>${2})', $url);
$r'origin'] = '/'.str_replace('/', '\/', $r'origin']).'/';
self::$routes] = $r;
debug($r);
}
static function url($url)
{
foreach (self::$routes as $v)
{
if(preg_match($v'origin'], $url, $match))
{
foreach ($match as $k => $m)
{
if(!is_numeric($k))
{
$v'redir'] = str_replace(":$k:", $m, $v'redir']);
}
}
return $v'redir'];
}
}
return $url;
}
}
Et ma ligne dans ma vue :
<a class="tiny button" id="button" href="<?= Router::url("posts/view/id:{$p->id}/slug:$p->slug");?>"/>Lire la suite »</a>
Merci de votre aide !
Erreur de débutant, le problème venait de cette ligne-ci :
$v'redir'] = str_replace(":$k:", $m, $v'redir']);
Il ne fallait pas y mettre les deux points entre $k, seulement des deux points avant ;)
$v'redir'] = str_replace(":$k", $m, $v'redir']);