Salut à tous !
Je suis un débutant en matière de php, et j'ai vu ces tutos sur la création d'un site dynamique en 7 jours par graphikart !
Je me suis pris au jeu mais dès le 2ième jour, j'ai eu un soucis.
J'ai pourtant suivi le tuto à la lettre (même si je comprend 50% de ce qui est afficher à l'écran (bon okey, 10%)) et j'ai le soucis suivant:
" Warning: require(C:\Program Files\EasyPHP-12.1\www\InFamouS Esport\controller\InFamouS Esport\Controller.php): failed to open stream: No such file or directory in C:\Program Files\EasyPHP-12.1\www\InFamouS Esport\core\Dispatcher.php on line 28

Fatal error: require(): Failed opening required 'C:\Program Files\EasyPHP-12.1\www\InFamouS Esport\controller\InFamouS Esport\Controller.php' (include_path='.;C:\php\pear') in C:\Program Files\EasyPHP-12.1\www\InFamouS Esport\core\Dispatcher.php on line 28"

Voici le code (j'ai eu le problème dès la 30ième minute, mais j'ai quand même persister à l'idée de changer ce petit bout de code, mais malheureusement, non :/))

Code du fichier Dispatcher.php:

"<?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->controllers.'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);
        }
        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).DS.'Controller';
            $file = ROOT.DS.'controller'.DS.$name.'.php';
            require $file;
            return new $name($this->request);
        }

}"

Controller.php:

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

Voilà, j'espère que le problème peu être résolu !
Merci d'avance.

3 réponses


Salut :),

Effectivement ceci est normale, comme tu peut le voir ton url est pas bonne :

C:\Program Files\EasyPHP-12.1\www\InFamouS Esport\controller\InFamouS Esport\Controller.php
C:\Program Files\EasyPHP-12.1\www\InFamouS Esport\ = racine de ton site
controller\ = nom du controller normalement appeler 
InFamouS Esport\ = nom du dossier que contient ton site (normalement ceci devrai être l'action appeler)
Controller.php = il manque le nom du controller (exemple: PostController.php) (normalement variables)

<u></u>
<u>url qui devrai normalement être appeler :</u>

C:\Program Files\EasyPHP-12.1\www\InFamouS Esport\ + (nom du controller + 'Controller.php')\ + action \ + variables si il y en a

à mon avis ton problème viens surement de Request donc est-ce que ton request ressemble à ceci :

<?php
class Request{

    public $url; // URL appellé par l'utilisateur
    public $page = 1; // pour la pagination 
    public $prefix = false; // Prefixage des urls /prefix/url
    public $data = false; // Données envoyé dans le formulaire
    function __construct(){
        $this->url = isset($_SERVER'PATH_INFO'])?$_SERVER'PATH_INFO']:'/'; 
        // Si on a une page dans l'url on la rentre dans $this->page
        if(isset($_GET'page'])){
            if(is_numeric($_GET'page'])){
                if($_GET'page'] > 0){
                    $this->page = round($_GET'page']); 
                }
            }
        }
        // Si des données ont été postées ont les entre dans data
        if(!empty($_POST)){
            $this->data = new stdClass(); 
            foreach($_POST as $k=>$v){
                $this->data->$k=$v;
            }
        }
    }
}

J'ai eu le même problème et je sais que grâce à ceci $this->url = isset($_SERVER'PATH_INFO'])?$_SERVER'PATH_INFO']:'/'; que j'ai trouver dans ce topic Texte du lien cela m'avait débloquer ;)

iEagle
Auteur

Merci de ton aide.
Malheureusement, je n'ai pas pus résoudre le problème.

Puis je vais d'abord me concentrer à la base de php avant de m'attaquer à cette technique !
(Parce que faire du copie/coller, ne sert strictement à rien quand on ne comprend rien :roll:)
Aller, à la prochaine ;)

Bonne état d'esprit ;)

à la prochaine :)