Bonjour,

Actuellement, vu que je n'ai pas besoin de rediriger tout un bloc d'urls, je n'ai pas souhaité suivre la démarche qui alourdirait plus mon code. Cependant, j'ai le même problème de la homepage qui écrase tout.
La méthode expliquée pour corriger cela n'affecte que le code traitant tous les arguments, donc pas pour mon cas... Dans ce cas comment faire ?
Voici mon routeur :

<?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, '/');
            if(empty($url)) {
                $url = Router::$routes[0]'url'];
            }
            else {
                foreach(Router::$routes as $v) {
                    if(preg_match($v'catcher'], $url, $match)) {
                        $request->controller = $v'controller'];
                        $request->action = $v'action'];
                        $request->params = array();
                        foreach($v'params'] as $c2 => $v2) {
                            $request->params$c2] = $match$c2];
                        }
                        return $request;
                    }
                }
            }

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

        static function connect($redir, $url) {
            $r = array();
            $r'params'] = array();
            $r'url'] = $url;
            $r'redir'] = $redir;

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

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

            $r'catcher'] = $redir;
            foreach($r'params'] as $c => $v) {
                $r'catcher'] = str_replace(':'.$c, '(?P<'.$c.'>'.$v.')', $r'catcher']);
            }
            $r'catcher'] = '/'.str_replace('/', '\/', $r'catcher']).'/';

            self::$routes] = $r;
        }

        static function url($url) {
            foreach(self::$routes as $v) {
                if(preg_match($v'origin'], $url, $match)) {
                    foreach($match as $c => $w) {
                        if(!is_numeric($c)) {
                            $v'redir'] = str_replace(':'.$c, $w, $v'redir']);
                        }
                    }
                    return BASE_URL.'/'.$v'redir'];
                }
            }
            return BASE_URL.'/'.$url;
        }
    }

1 réponse


jmsche
Auteur
Réponse acceptée

Auto-correction :
Ligne 44 :

$r'origin'] = '#^'.str_replace('/', '\/', $r'origin']).'$#';

Ligne 66 :

$r'catcher'] = '#^'.str_replace('/', '\/', $r'catcher']).'$#';