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 !

1 réponse


Noudnou
Auteur
Réponse acceptée

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']);