J'ai un message d'erreur quand je suis le Jour 2, il me demande le fichier ViewController.php alors que à aucun moment j'ai demander ce fichier dans mon code. Que faire ?

Merci

Warning: require(C:\wamp\www\chris\controller\ViewController.php) <a href='function.require'>function.require</a>]: failed to open stream: No such file or directory in C:\wamp\www\chris\core\Dispatcher.php on line 16
Call Stack

Time Memory Function Location

1 0.0002 677888 {main}( ) ..\index.php:0
2 0.0008 703880 Dispatcher->__construct( ) ..\index.php:9
3 0.0008 704936 Dispatcher->loadController( ) ..\Dispatcher.php:9

( ! ) Fatal error: require() <a href='function.require'>function.require</a>]: Failed opening required 'C:\wamp\www\chris\controller\ViewController.php' (include_path='.;C:\php\pear') in C:\wamp\www\chris\core\Dispatcher.php on line 16
Call Stack

Time Memory Function Location

1 0.0002 677888 {main}( ) ..\index.php:0
2 0.0008 703880 Dispatcher->__construct( ) ..\index.php:9
3 0.0008 704936 Dispatcher->loadController( ) ..\Dispatcher.php:9

9 réponses


Lotfi Berrahal
Réponse acceptée

ici ton $name est égal à ViewController du coup dans ton url tu dois avoir un view quelque part forcément.

il récupère le controller dans l'url et ensuite $file fait un require de controller/$name.php soir
controller/ViewController.php
Le soucis viens surement de là !
Si tu n'a pas de viewController.php crée le ( fait attention à la casse )
Sinon dans ton url remplace view par post si tu as PostController.php d'existant ou PagesController.php à ce moment la tu met page à la place de view

Salut Chris,

D'après le message d'erreur, à la ligne 16 de ton fichier Dispatcher.php ton script appel un fonction qui n'est pas reconnu.

Peut-être un simple problème de syntaxe?

Poster le bout de code entourant (et incluant) la ligne 16 de Dispatcher.php pourrait être utile afin de recuiellir de l'aide sur le forum...

Bon dev'!

<?php
class Dispatcher{
    var $request;
    function __construct(){
        $this->request = new Request();
        Router::parse($this->request->url,$this->request);
        $controller = $this->loadController();
        $controller -> view();
    }
    function loadController(){
        $name = ucfirst($this->request->controller).'Controller';
        $file = ROOT.DS.'controller'.DS.$name.'.php';
        require $file;
        return new $name($this->request);
    }
}
?>

Je pense que le nom du controller n'est pas bon regarde au niveau de ton url si tu appelles un controller existant car il ne trouve pas le fichier
il faudrait que le controller que tu appelle avec ton url est le même nom que sur l'url justement ! :)

Bonjour merci de ta réponse j'ai essayer mais c'est pareil, j'ai suivis exactement le tuto "Développer de A à Z" j'ai recommencer de zéro et j'ai toujours le même problème, je comprend pas pourquoi il REQUIRE le fichier ViewController.php alors que dans le code il n'y a aucun moment un appel de ce fichier.

En effet sa marche mieux si je met pages au lieu de view, Merci beaucoup !

Salut,

Je pense que le problème vient du routing comme le suggère Lofti.

Essaie:

/**
    *Fonction principale du dispatcher
    *Charge le controller en fonction du routing
    **/
    function __construct(){
        $this->request = new Request();
        Router::parse($this->request->url,$this->request);
        $controller = $this->loadController();
        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'.$this->request->action);
            }
        call_user_func_array(array($controller,$this->request->action),$this->request->params);
        $controller->render($this->request->action);
    }
    /**
    *Permet de générer une page d'erreur en cas de problème au niveau du routing (page inexistante)
    **/
    function error($message){
        $controller = new Controller($this->request);
        $controller->e404($message);
    }
    /**
    *Permet de charger le controller en fonction de la requète utilisateur
    **/
    function loadController(){
        $name = ucfirst($this->request->controller).'Controller';
        $file = ROOT.DS.'controller'.DS.$name.'.php';
        require $file;
        return new $name($this->request);
    }

Tu doit normallement voir ca un peu plus loin dans le tuto...

Bon je me retrouve avec un autre problème sur le tuto jour 3, je n'arrive pas à me connecter à la BDD pourtant mon fichier conf et model et identique à celui du tuto

conf.php

<?php
class Conf{
static $databases = array(
    'default' => array(
        'host' => 'localhost',
        'database' => 'site',
        'login' => 'root',
        'password' => ''
        )
    );
}

Model.php

<?php
class Model{
    public $db = 'default';
    public function __construct(){
        global $databases;
        print_r($databases);
    }
    public function find(){
    }

}

Merci

et aussi je n'arrive pas a mettre le bootsrap twitter de la video.