Bonjour à tous j'ai commencé les tutos et je suis confronté a un petit problème qui va surement être simple pour vous ^^
lorsque je clique sur lire la suite dans le menu la redirection de l'url devrait s'écrire :

http://127.0.0.1/post/ma-quatrieme-page-4

Alors que chez moi elle s'écrit :

http://127.0.0.1/\/post/ma-quatrieme-page-4

j'ai un antislash en trop et j'aimerais l'enlever mais je suis perdu dans le code est ce que vous pouvez m'aider svp
Merci à tous

3 réponses


nidnight
Auteur
Réponse acceptée

J'ai trouvé c'est lorsque je mets

return BASE_URL.str_replace('//','/','/'.$v'redir']).$match'args'];

Il m'ajoute un antislash si ca peut vous aider à me répondre
merci

nidnight
Auteur

Voici le code du routeur si ça peut vous éclairer :

<?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 = isset($match'action']) ? $match'action'] : $v'action']; 
                    $request->params = array(); 
                    foreach($v'params'] as $k=>$v){
                        $request->params$k] = $match$k];
                    }
                    if(!empty($match'args'])){
                        $request->params += explode('/',trim($match'args'],'/'));
                    }
                    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; 
    }

    /**
    * Connect
    **/
    static function connect($redir,$url){
        $r = array();
        $r'params'] = array();
        $r'url'] = $url;  
        $r'redir'] = $redir; 
        $r'origin'] = str_replace(':action','(?P<action>([a-z0-9\-]+))',$url);
        $r'origin'] = preg_replace('/([a-z0-9]+):(^\/]+)/','${1}:(?P<${1}>${2})',$r'origin']);
        $r'origin'] = '/^'.str_replace('/','\/',$r'origin']).'(?P<args>\/?.*)$/'; 
        $params = explode('/',$url);
        foreach($params as $k=>$v){
            if(strpos($v,':')){
                $p = explode(':',$v);
                $r'params']$p[0]] = $p[1]; 
            }else{
                if($k==0){
                    $r'controller'] = $v;
                }elseif($k==1){
                    $r'action'] = $v; 
                }
            }
        } 
        $r'catcher'] = $redir;
        $r'catcher'] = str_replace(':action','(?P<action>([a-z0-9\-]+))',$r'catcher']);
        foreach($r'params'] as $k=>$v){
            $r'catcher'] = str_replace(":$k","(?P<$k>$v)",$r'catcher']);
        }
        $r'catcher'] = '/^'.str_replace('/','\/',$r'catcher']).'(?P<args>\/?.*)$/'; 
        self::$routes] = $r; 
    }
    /**
    * 
    **/
    static function url($url){
        foreach(self::$routes as $v){
            if(preg_match($v'origin'],$url,$match)){
                foreach($match as $k=>$w){
                    if(!is_numeric($k)){
                        $v'redir'] = str_replace(":$k",$w,$v'redir']); 
                    }
                }
                return BASE_URL.str_replace('//','/','/'.$v'redir']).$match'args']; 
            }
        }
        return BASE_URL.'/'.$url; 
    }
}
nidnight
Auteur

il fallait enlever le BASE_URL