Bonjour,
Voila je rencontre un petit problème avec mon code.
avec mes liens lire la suite
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 →</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>
j'aimerais que mon lien lire la suite soit de la forme
localhost/MonSite2/Site/post/pages-post-2
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
Salut,
Souci de quotes :
<p><a href="<?= Router::url('/posts/view/id:' . $v->id . '/slug:' . $v->slug); ?>">Lire la suite →</a></p>