Bonjour, j'ai un problème avec le tuto Développer un site : Jour 4, Gestion des routes, car à la fin de la vidéo quand je clique sur un post, la page du post est introuvable sur firefox, mais sur chrome et explorer le post s'affiche bien.
Voici la page PostsController dans le dossier controller:
<?php
class PostsController extends Controller{
function index(){
$perPage = 1;
$this->loadModel('Post');
$condition = array('type'=>'post', 'online' => 1);
$d'posts'] = $this->Post->find(array(
'conditions' => $condition,
'limit' => ($perPage*($this->request->page-1)).','.$perPage
));
$d'total'] = $this->Post->findCount($condition);
$d'page'] = ceil($d'total'] / $perPage);
$this->set($d);
}
function view($id,$slug){
$this->loadModel('Post');
$d'post'] = $this->Post->findFirst(array(
'fields' => 'id,slug,content,name',
'conditions' => array('id'=>$id,'type'=>'post', 'online' => 1)
));
if(empty($d'post'])){
$this->e404('Page introuvable');
}
if($slug != $d'post']->slug){
$this->redirect("posts/view/id:$id/slug:".$d'post']->slug,301);
}
$this->set($d);
}
}
?>
Et voici le fichier Router.php dans le fichier core:
<?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
function connect($redir,$url){
$r = array();
$r'params'] = array();
$r'url'] = $url;
$r'redir'] = $redir;
$r'origin'] = str_replace(':action','(?P<action>([a-zA-Z0-9]+))',$url);
$r'origin'] = preg_replace('/([a-zA-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-zA-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;
}
//URL
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;
}
}
?>
Si quelqu'un peut m'aider à résoudre ce problème, je le remercie.
Merci d'avoir lu mon message. Merci.
Bonjour, j'ai trouvé mon erreur, dans le conf.php j'avais mis post à la place de blog.
Salut !
Peut-être que ta version FireFox n'est pas adaptée à ton site. Va le mettre à jour :)