J'ai suivi ce tuto :

Tutoriel vidéo PHP : Développer un site : Jour 2, La structure PHP

Voici les erreurs qui me sont retourné:

( ! ) Warning: require(C:\wampserver\www\precandidature\controller\Controller.php): failed to open stream: No such file or directory in C:\wampserver\www\precandidature\core\Dispatcher.php on line 14

( ! ) Fatal error: require(): Failed opening required 'C:\wampserver\www\precandidature\controller\Controller.php' (include_path='.;C:\php\pear') in C:\wampserver\www\precandidature\core\Dispatcher.php on line 14

ET voilà mon code :

Dispatcher.php

<?php

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

}

Request.php

<?php

class Request{
    public $url; // URL appelé par l'utilisateur 
    function __construct(){

        $url = (isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : substr($_SERVER['REQUEST_URI'], strlen(BASE_URL)-strlen($_SERVER['REQUEST_URI'])));
        $this->url = $url;

    }
}

?>

PagesController.php

<?php
    class PagesController extends Controller{
        fonction voir(){
            echo 'Merci';
        }
    }

?>

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

?>

Controller.php

<?php

class Controller{}

?>

includes.php

<?php
require 'Request.php';
require 'Router.php';
require 'Controller.php';
require 'Dispatcher.php';

?>

index.php

<?php
define('WEBROOT', dirname(__FILE__));
define('ROOT', dirname(WEBROOT));
define('DS', DIRECTORY_SEPARATOR);
define('CORE', ROOT.DS.'core');
define('BASE_URL', dirname(dirname($_SERVER['SCRIPT_NAME'])));
require CORE.DS.'includes.php';
new Dispatcher();
?>

Mon arborescence est :

0-www

1-precandidature

2-controller -> PagesControllers.php

2-core -> Controller.php + Dispatcher.php + Router.php + Request.php + includes.php

2-model

2-view

2-webroot -> css + img + js + index.php + .htaccess

.htaccess

9 réponses


Bonjour,
Il ne trouve pas ce fichier : C:\wampserver\www\precandidature\controller\Controller.php car la variable $this->request->controller n'existe pas.

Merci pour votre réponse j'ai ecrit le même code de tuto vraiment je ne sais pas ou est la difference merci de me dire ou je peux declarer la variable

Pouvez vous m'indiquer l'url que vous essayer de charger

Bonjour.
Déjà, ce n'est pas:

fonction voir() {
    // ...
}

Mais

function voir() {
    // ...
}

J'ai modifier "fonction" par function mais toujours il m'affiche le meme message d'erreur ci dessus sur n''importe quelle url j'ai le meme code de ce tuto

( ! ) Warning: require(C:\wampserver\www\precandidature\controller\CssController.php): failed to open stream: No such file or directory in C:\wampserver\www\precandidature\core\Dispatcher.php on line 14

Voila le Fichier .htacces qui se trouve dans la racine de mon site

RewriteEngine On
RewriteRule (.*) webroot/$1 [L]

.htaccess dans webroot

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) index.php/$1 [L]

Bonjour, j'ai exactement le même soucis et je ne trouve pas l'erreur.

Bonjour, est ce que tu as essayer de voir ou pointe la constante ROOT avec un var_dump et voir le contenu de la variable $file ?

bonjour je rencontre le même problème je demande de l'aide pour le resoudre