Bonjour,

En suivant à la lettre et pas à pas le tuto n°2 pour développer une architecture en PHP, arrivé au terme de la vidéo je rencontre deux messages d'erreurs :

[http://hpics.li/920dd01]
Dans le doute si le lien vers l'image ne fonctionne pas :
1) Warning: require(E:\wamp64\www\projet-SCAL\controller\ViewController.php): failed to open stream: No such file or directory in E:\wamp64\www\projet-SCAL\core\Dispatcher.php on line 30
2) Fatal error: require(): Failed opening required 'E:\wamp64\www\projet-SCAL\controller\ViewController.php' (include_path='.;C:\php\pear') in E:\wamp64\www\projet-SCAL\core\Dispatcher.php on line 30

J'ai pourtant (sauf erreurs bien sûr) veillé à la lettre les notations des fichiers et répertoires. Structrure :

!([http://hpics.li/37fc95c])
Ce qui me gène dans ces messages d'erreur sont les chemins, le problème devant venir de la gestion de l'url ?aroundEn tout cas comment arriver à atteindre enfin ma page index.php (en sachant que suivant l'url j'arrive à afficher la page 404.php).

Enfin dans mon Dispatcher.php le code est :

<?php
class Dispatcher{
var $request;

function __construct(){
    $this->request = new Request();
    Router::parse($this->request->url,$this->request);
    $controller = $this->loadController();
    if(!in_array($this->request->action,get_class_methods($controller))){
        $this->error('Le controller '.$this->request->controller.' n\'a pas de méthode '.$this->request->action);
    }else{
    call_user_func_array(array($controller,$this->request->action),$this->request->params);
    $controller->render($this->request->action);
    }

}

function error($message){
    header("HTTP/1.0 404 Not Found");
    $controller = new Controller($this->request);
    $controller->set('message',$message);
    $controller->render('/errors/404');        
    die();
}

function loadController(){
    $name = ucfirst($this->request->controller).'Controller';
    $file = ROOT.DS.'controller'.DS.$name.'.php';
    require $file;
    return new $name($this->request);
}
}
Et dans Request.php :
class Request{
public $url;

function __construct(){        
$this->url = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO']:'/';    
}    
}


Enfin, j'avais un problème concernant le PATH_INFO *mais j'ai pu le corriger grâce à des indications sur ce forum. 

Je vous remercie pour votre aide, je fouille depuis 2 jours pour trouver une solution.. 
mais sans succès :(
Merci :)  !

6 réponses


AlexJM
Réponse acceptée

Bonjour,
Pouvez vous montrer le contenu de Router.php ?

Merci pour votre intervention AlexJM,
Router.php :


    <?php
        class Router{static function parse($url, $request){
        $url = trim($url,'/');
        $params = explode('/',$url);
        $request->controller = $params[0];
        $request->action = isset($params[1]) ? $params[1] : 'index';
        $request->params = array_slice($params,2);
        return true;
    }
    } 

Pas de problème
Quelle est l'url que vous consultez ?

Bonsoir.
D'après l'erreur, le fichier demandé serait ViewController.php, sauf que je ne pense pas que ce soit ce que tu souhaites et étant donné que tu ne dois pas avoir un fichier qui se nomme comme ceci (selon la structure des fichiers que tu nous montre), essaies de voir d'où ça doit venir.
Quel est l'adresse que tu appelles ?

Bon.. encore une fois merci car en fin de compte vous avez relevé le problème : l'url...
Pourtant Je l'ai modifié très régulièrement et en retrouvant les mêmes erreurs : http://localhost/projet/
puis http://localhost/projet/pages/view/
Eh bien je ne sais que dire... car reprennant http://localhost/projet/pages/
Finalement la page index fini par s'afficher.. !! Conclusion... le code ok, juste l'url posait soucis...
(du coup j'ai ré-édité le post en résolu ^^)

Clique sur le bouton résolu (je sais plus exactement le nom) comme ça le système saura qu'il est résolu ;)