Bonjour,
Je suis entrain de faire le tuto Développer un site : Jour 2
J'en suis à 29:35 (timecode de la vidéo).
Quand je lance tape

$controller->view();

Au lieu d'avoir une page avec Vous voyez j'ai une
Fatal error: Call to a member function view() on a non-object in C:\Program Files\wamp\www\site A a Z\core\dispatcher.php on line 10

Juste avant tout se passe comme sur des roulettes. Juste quand je lance cette fonction view() ça plante.
Une idée ou comment débugger ça une piste?

Car dans dispatcher.php la ligne suivante devrait bien faire de $controller un objet de la classe PagesController et donc trouver la fonction view().

$controller = new $name($this->request);

Visiblement il y a un truc qui ne marche pas comme prévu. Mais je n'arrive pas à voir ce qui ne va pas.

3 réponses


Grafikart
Réponse acceptée

tu n'a pas oublié un return dans loadController() ?

Vintz
Auteur

Quelques précisions

<?php
class Dispatcher {

    var $request;

    function __construct() {
        $this->request = new Request();
        Router::parse($this->request->url, $this->request);
        $controller = $this->loadController();
        // var_dump($controller);
        $controller->view();
    /*  call_user_func_array(
            array($controller,$this->request->action),array());*/
    }

    function loadController(){
            if (isset($_SERVER'PATH_INFO'])) {
            $name = ucfirst($this->request->controller).'Controller';
            $file = ROOT.DS.'controller'.DS.$name.'.php';
            require $file;
            $controller = new $name($this->request);
            var_dump($controller);
            }
    }
}
?>

Quand je place var_dump($controller); dans loadController() pas de soucis l'objet est créé et ça me retourne object(PagesController)#3 (0) { }
En revanche lorsque je déplace var_dump($controller) dans __construct__() là il n'existe plus donc forcément ensuite j'ai une Fatal error.

Comment remédier à cela? Pouvoir appeler cet objet dans le constructeur?
Le code fournit serait-il buggé?

J'ai besoin de vos lumières.

Vintz
Auteur

Ah oui en effet.
Quand on a le nez plongé dans le code on ne voit plus les erreurs les plus grosses.
Oh moins ça m'aura permis de mieux analyser le code complet.