Bonjour, je suis le tuto de création de site et j'ai un problème. Excuser moi si cette question a déjà été posé:
Lorsque je suis sur la page principale (c'est à dire ma racine), il me met une erreur 404 "Le controller n'existe pas !".
Comme c'est le début, cela m'énerve un peu :).
Merci et bonne journée.
ha ok :) je me rapelle plus si c'est dans la seconde partie ou la partie sur le routing mais oui en effet sa sera corriger par la suite :) car justement tu auras dans le Router une fonction qui va te permettre de justement rediriger l'utilisateur lorsque tu te connect directement sur ton site :)
//fonction qui te redirigera par exemple sur l'index des posts
Router::connect('/','posts/index');
continue à regarder les autres parties si ce n'est pas dans la seconde :)
pour ton problème en effet dans l'url tous est vide donc il n'y à pas la redirection ;)
C'est le même que celui du tuto :
<?php
class Controller
{
public $request;
private $vars = array();
public $layout = 'default';
private $rendered = false;
function __construct($request){
$this->request = $request;
}
public function render($view){
if($this->rendered){ return false; }
extract($this->vars);
if(strpos($view, '/') === 0){
$view = ROOT.DS.'view'.$view.'.php';
}else{
$view = ROOT.DS.'view'.DS.$this->request->controller.DS.$view.'.php';
}
ob_start();
require ($view);
$content_for_layout = ob_get_clean();
require ROOT.DS.'view'.DS.'layout'.DS.$this->layout.'.php';
$this->rendered = true;
}
public function set($key, $value = null){
if(is_array($key)){
$this->vars += $key;
}else{
$this->vars$key] = $value;
}
}
}
?>
Salut donc la je me trompe pas de post ^^
à tu dans ton fichier config ceci :
Router::connect('/','posts/index');
pour savoir si tu redirige bien ver l'index ds post lorsque l'on tape juste le nom de ton site.
après si tu n'a pas cette ligne alors ajoute un debug($this->request); dans ton construct de la class Dispatcher pour voir se que contient l'url appeler :)
function __construct(){
$this->request = new Request();
Router::pars($this->request->url,$this->request);
$controller = $this->loadController();
//debug de request pour voir l'url appeler
debug($this->request);
if(!in_array($this->request->action,array_diff(get_class_methods($controller),get_class_methods('Controller')))){
$this->error('Le controller '.$this->request->controller.' n\'a pas de méthode');
}
call_user_func_array(array($controller,$this->request->action), $this->request->params);
$controller->render($this->request->action);
}
montre moi le résultat du debug ;)
Salut merci de ta réponse, et non je ne l'ai pas car je ne suis que à la 2ème partie. Après je n'ai pas vue les secondes et peut-être que mon erreur est corrigée ensuite. Sinon si je fais un print_r de $this->request dans mon Controller.php il me dit: Request Object ( [url] => [controller] => [action] => index [params] => Array ( ) )
Je te remercie beaucoup. Je valide ta réponse et reposerais une autre question si ça ne fonctionne toujours pas.
Bonne journée