Bonjour,
Je rencontre un problème dans le tuto: Développer un site : Jour 2, La structure PHP.
Je n'arrive pas à récupérer le dossier suivant view.

La fonction render me donne une valeur : /var/www/alpha/view//index.php alors que je devrais avoir /var/www/alpha/view/ pages /index.php

Voici le code du Controller:

<?php
class Controller {
    public $request;

    function __construct($request) {
        $this->request = $request;
    }
    public function render($view){
        $view = ROOT.DS.'view'.DS.$this->request.DS.$view.'.php';
        print_r($view);

    }
}
?>

Et le code du Dispatcher si sa peu être utile ^^'

<?php
class Dispatcher {
    public $request;

    function __construct() {
        $this->request = new Request;
        Router::parse($this->request->url,$this->request);
        $controller = $this->loadController();
        call_user_func_array(array($controller,$this->request->action),$this->request->params);

    }

    function loadController(){
        $name = ucfirst($this->request->controller).'Controller';
        $file = ROOT.DS.'controller'.DS.$name.'.php';
        require $file;
        return new $name($this->request);
        print_r($this->request);
    }

}
?>

Merci.

3 réponses


<?php
class Controller {
    public $request;

    function __construct($request) {
        $this->request = $request;

    }

    public function render($view){
        $view = ROOT.DS.'view'.DS.$this->request->controller.DS.$view.'.php';
        print_r($view);

    }
}
?>

À tout hasard ?

$view = ROOT.DS.'view'.DS.$this->request->controller.DS.$view.'.php';

si pages correspond à ton contrôleur, alors c'est $this->request->controller et non $this->request qui lui est un objet et que tu ne peux pas introduire directement comme ça dans une chaine.

J'avais aussi essayer de cette manière mais sa n'avez rien donné ... (Sa fait 3h que je suis sur ce soucis et je n'éxagère pas).

Ce qui m'énerve c'est que quand je fait un :

print_r($this->request->controller);

Dans mon dispatcher de cette manière:

<?php
class Dispatcher {
    public $request;

    function __construct() {
        $this->request = new Request;
        Router::parse($this->request->url,$this->request);
        $controller = $this->loadController();
        print_r($this->request->controller); // Print_r pour afficher le controller -------------------------!!!!
        call_user_func_array(array($controller,$this->request->action),$this->request->params);

    }

    function loadController(){
        $name = ucfirst($this->request->controller).'Controller';
        $file = ROOT.DS.'controller'.DS.$name.'.php';
        require $file;
        return new $name($this->request);
    }

}
?>

Je retrouve bien la valeur "pages". Donc quelque chose m'échappe ...

Et le code actuelle pour mon Controller est :

<?php
class Controller {
    public $request;

    function __construct($request) {
        $this->request = $request;
    }
    public function render($view){
        $view = ROOT.DS.'view'.DS.$this->request->controller.DS.$view.'.php';
        print_r($view);

    }
}
?>

Mais il me retourne toujours : /var/www/alpha/view//index.php malheuresement :/

Merci :)

Personne pour me donner un ptit coup de pouce ?