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.

9 réponses


ksta
Réponse accepté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 ;)

peut tu nous donnée le code source de ton controller ?

Evywell
Auteur

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

    }
?>

désoler je me suis tromper de posts :)

Evywell
Auteur

Pas de problème

Evywell
Auteur

Un peu d'aide S.V.P ?

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

Evywell
Auteur

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 ( ) )

Evywell
Auteur

Je te remercie beaucoup. Je valide ta réponse et reposerais une autre question si ça ne fonctionne toujours pas.
Bonne journée