Bonjour,

Voila je rencontre un petit problème avec mon code.
avec mes liens lire la suite

Ce que je fais

Router.php

Entourez votre code avec ce symbole ```<?php
class Router{

    static $routes = array();

    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;
    }

//Connet
    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;
    }
}
?>

conf.php

<?php
class Conf{
    static $debug = 1;

    static $databases = array(
        'default' => array(
            'host' =>'localhost',
            'database' => 'tuto',
            'login' => 'root',
            'password' => ''
        )
    );
}
Router::connect('/','posts/index');
Router::connect('blog/:slug-:id','posts/view/id:([0-9]+)/slug:([a-z0-9\-]+)');
Router::connect('blog/:action','posts/:action');
?>

index.php

<div class="page-header">
    <h1>Le blog pkrclub</h1>
</div>
<?php foreach ($posts as $k => $v): ?>
    <h2><?php echo $v->name; ?></h2>
    <?php echo $v->content; ?>
    <p><a href="<?php echo Router::url("/posts/view/id:{$v->id}/slug:$v->slug"); ?>">Lire la suite &rarr;</a></p>
<?php endforeach ?>

<div class="pagination">
    <ul>
        <?php for($i=1; $i <= $page; $i++): ?>
            <li <?php if($i==$this->request->page) echo 'class="active"'; ?>><a href="?page=<?php echo $i; ?>"><?php echo $i; ?></a></li>
        <?php endfor; ?>
    </ul>
</div>

Ce que je veux

j'aimerais que mon lien lire la suite soit de la forme
localhost/MonSite2/Site/post/pages-post-2

Ce que j'obtiens

Mais j'obtien plutot sa a la place
localhost/MonSite2/Site//posts/view/id:3/slug:pages-post
un peu d'aide svp mercie d'avence

2 réponses


Salut,

Souci de quotes :

<p><a href="<?= Router::url('/posts/view/id:' . $v->id . '/slug:' . $v->slug); ?>">Lire la suite &rarr;</a></p>

betaWeb merci bien pour ta réponse si rapide mais sa ne régler pas mon problème