Bonjour à tous !
Alors voila je suis en train de suivre l'excellent tuto "Créer son site en PHP" j'en suis au jour 2 et j'ai un gros problème.
class Dispatcher{

var $request;

function __construct(){
    $this->request = new Request(); //Initialise la variable
    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);
    }

}
Le problème est que rien ne s'affiche et je suis pratiquement sur que le problème vient de Dispatcher{
En effet, il fallait mettre $Dispatcher = new Dispatcher();. Cependant en rajoutant ces deux fonctions (__Construct et loadController) je ne peux garder $Dispatcher = new Dispatcher();
Quelqu'un aurait trouvé une solution ?
Bien cordialement,

16 réponses


Carouge10
Réponse acceptée

Puis-je avoir le code d'index.php et includes.php

Thomas Simonini
Auteur
Réponse acceptée

Bien sur :

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']))); //Remonter d'un cran dans l'url
require CORE.DS.'includes.php';
?>

includes.php
<?php
require 'Request.php';
require 'Router.php';
require 'Dispatcher.php';
require 'Controller.php';
Thomas Simonini
Auteur
Réponse acceptée

Parfait quand je tappe ton URL ça marche !
Merci beaucoup !!!!

Bonjour,
Vous avez un message d'erreur ?
Le constructeur est bien chargée ?

En fait rien ne s'affiche c'est bien ça le problème. J'ai aucun message d'erreur

define('WEBROOT', dirname(__FILE__));

et là vous pouvez faire votre new Dispatcher();

Oui j'avais bien écrit ça mais en copiant, collant ça a enlevé les underscores.
Le new Dispatcher() je le met en dessous de cette ligne ?

Non juste après le require CORE...

Merci :D
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']))); //Remonter d'un cran dans l'url
require CORE.DS.'includes.php';
new Dispatcher();

Le problème c'est que ça me lance deux erreurs :
require(C:\wamp\www\CMS\controller\ViewController.php): failed to open stream: No such file or directory in C:\wamp\www\CMS\core\Dispatcher.php on line 17
require(): Failed opening required 'C:\wamp\www\CMS\controller\ViewController.php' (include_path='.;C:\php\pear') in C:\wamp\www\CMS\core\Dispatcher.php on line 17
La première erreur je pense comprendre la seconde pas du tout

Les 2 sont liés.
A mon avis c'est l'espace sur :

$controller ->view();   

J'ai modifié mais ça ne vient pas de ça.
require(C:\wamp\www\CMS\controller\ViewController.php): or, je n'ai pas de fichier ViewController.php

Puis-je avoir request.php et l'url que vous avez saisi ?

<?php
class Request{

public $url; //URL appelé par l'utilisateur.

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

}

J'ai inscrit l'URL :
http://localhost/CMS/view/index

vous essayer d'atteindre qu'elle page ?

index.php du dossier view

Je pense que cela doit venir de la fonction parse du fichier Router.php
Car pour voir une page,l'url est du style localhost/CMS/pages/view/1