Site de A à Z jour 1...

Par neuillane, il y a 13 ans


Bon, je viens de finir le premier tuto mais il y a tourjours ce message d'erreur de la 27eme minutes. Meme avec les gestions d'erreurs rien n'y fait...

Voici l'erreur:

Voici mon controller.php:

<?php
class controller{   
    public $request;
    public $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 += $keys;               
        }else{
            $this->vars$keys] = $value;     
        }   
    }

    }
?>

J'ai suivi le tuto à la lette et je l'ai refait 2 fois... Je ne comprends pas?
Quelqu'un sait ce qui ne va pas?

21 réponses

RedaElkhayat, il y a 13 ans

Tu as oublié une petite fermeture d'une fonction,
voilà le code exacte.

<?php
class controller{  

    public $request;
    public $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 += $keys;               
        }else{
            $this->vars$keys] = $value;    
        }  
    }

    }
?>
neuillane, il y a 13 ans

merci je n'ai plus l'erreur mais maintenant il me dit qu'il y en a une en ligne 38 du Dispatcher :

<?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 methode '.$this->request->action);
        }       
        call_user_func_array(array($controller,$this->request->action),$this->
        request->params);
        $controller->render($this->request->action);    
    }
    function error($message){
        $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);

    }

            }                   

?>

Cela doit encore etre une erreur de fermeture mais ?

RedaElkhayat, il y a 13 ans

le même cas pour Dispatcher.php,

<?php
    function error($message){
        $controller = new Controller($this->request);
        $controller->set('message',$message);   
        $controller->render('/errors/404');
        die();
    } // <-- n'oublies jamais la fermeture :p
neuillane, il y a 13 ans

Ah ok mais maintenant il revient sur l'erreur initiale donc celle pourtant sur la ligne 28:

require $file;

Mon code semble complet et correct et il revient sur cette erreur deja trouvée à la 28eme minutes....

RedaElkhayat, il y a 13 ans

Quel type d'erreur il s'affiche ?

Ramz1994, il y a 13 ans

Bonjour,

À mon avis tu n'as pas mis ton controlleur dans l'URL (exemple : localhost/pages/view).

Bonne chance. :p

neuillane, il y a 13 ans

Voici l'erreur :

j'ai tenté de taper : localhost/pages/view ou localhost/pages/view/index.php mais il me dit :
"Undefined variable"?

j'ai suivi le tuto à la lettre :

1 dossier www avec à l'interieur 5 dossier : controller-core-model-view-webroot et le htacess.

dans le dossier controller j'ai le pagescontroller.php
dans le dossier core , j'ai controller.php, dispatcher.php, includes.php, request.php et router.php
dans le dossier view 3 dossiers : errors,layout et pages avec :

dans le dossier errors, le fichier 404.php
dans le dossier layout, le fichier default.php
dans le dossiers pages, le fichier index.php

et enfin le dossier webroot ave à l'interieur :
dossier css,img et js ainsi que fichier index.php et le htacess.

Quand tu dis que je n'ai pas mis mon controller dans l'url? que veux-tu dire par là? je dois aller demander à wamp une adresse pour ne plus avoir ses erreurs?

En tout cas, merci de votre aide

neuillane

RedaElkhayat, il y a 13 ans

tu renommes le fichier Controller.php avec une C majuscule au début.

neuillane, il y a 13 ans

mon fichier Controller etait bien avec un C majuscule. Si wamp se lance normalement , il me donne ses erreurs :

si je lui demande http://localhost/pages/view/index.php, voila l'erreur :

Je pense demander la bonne adresse et je pense aussi que le code est complet alors ....
J'ai vu sur le forum que l'erreur etait frequente, surtout pour les debutants comme moi...

RedaElkhayat, il y a 13 ans

Dans ton Controller.php c'est $key non pas $keys.

public function set($key,$value=null){
        if(is_array($key)){
            $this->vars += $key;              
        }else{
            $this->vars$key] = $value;   
        } 
    }
neuillane, il y a 13 ans

ah oui c'est deja mieux. Plus d'erreur mais seulement une page blanche?
Bon je ne m'attendais pas à cela?

neuillane, il y a 13 ans

voici les erreur d'apache:

[Mon Oct 22 08:09:19 2012] [error] [client 127.0.0.1] PHP Warning: require(C:\wamp\www\controller\Controller.php) <a href='function.require'>function.require</a>]: failed to open stream: No such file or directory in C:\wamp\www\core\Dispatcher.php on line 28
[Mon Oct 22 08:09:19 2012] [error] [client 127.0.0.1] PHP Stack trace:
[Mon Oct 22 08:09:19 2012] [error] [client 127.0.0.1] PHP 1. {main}() C:\wamp\www\webroot\index.php:0
[Mon Oct 22 08:09:19 2012] [error] [client 127.0.0.1] PHP 2. Dispatcher->__construct() C:\wamp\www\webroot\index.php:9
[Mon Oct 22 08:09:19 2012] [error] [client 127.0.0.1] PHP 3. Dispatcher->loadController() C:\wamp\www\core\Dispatcher.php:9
[Mon Oct 22 08:09:19 2012] [error] [client 127.0.0.1] PHP Fatal error: require() <a href='function.require'>function.require</a>]: Failed opening required 'C:\wamp\www\controller\Controller.php' (include_path='.;C:\php\pear') in C:\wamp\www\core\Dispatcher.php on line 28
[Mon Oct 22 08:09:19 2012] [error] [client 127.0.0.1] PHP Stack trace:
[Mon Oct 22 08:09:19 2012] [error] [client 127.0.0.1] PHP 1. {main}() C:\wamp\www\webroot\index.php:0
[Mon Oct 22 08:09:19 2012] [error] [client 127.0.0.1] PHP 2. Dispatcher->__construct() C:\wamp\www\webroot\index.php:9
[Mon Oct 22 08:09:19 2012] [error] [client 127.0.0.1] PHP 3. Dispatcher->loadController() C:\wamp\www\core\Dispatcher.php:9

je ne pense pas que ce soit normal d'avoir une pages blanche? Dans le tuto, on a fait un script mais rien n'apparait?

neuillane, il y a 13 ans

ENCORE MOI......

juste pour confirmation :

pagescontroller.php :

<?php
class pagescontroller extends Controller{
    function index(){

    }
}
?>

/view/pages/index.php:

div class="hero-unit">
    <h1>Bienvenue</h1>
    <p>c'est la page d'accueil</p>
</div>

index.php (dans dossier webroot):

<?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();
?>

Pourquoi rien n'apparait sur ma page meme lorsque je change la couleur daans le css, celle-ci n'apparait pas?

RedaElkhayat, il y a 13 ans

As-tu mis le controleur dans l'url ?

neuillane, il y a 13 ans

Veux-tu dire pâr là que j'ai appelé une mauvaise adresse comme => http://localhost/pages/view/index.php

ou qu'il faut que je deplace un des fichiers dans un autres?

RedaElkhayat, il y a 13 ans

http://localhost/ Controlleur / Action / Paramètres
aussi une autre chose, tu dois renommer ton class pagescontroller par P ages C ontroller avec les majuscules

neuillane, il y a 13 ans

Personne n'a de solution à me proposer?
Peux pas continuer le tuto 3 alors...

neuillane, il y a 13 ans

on est bien d'accord que le code de router doit rester tel quel....?

<?php
class Router{
    /**
    *Permet de parser une url
    *§param $url Url à parser
    *§RETURN TABLEAU CONTENANT LES PARAMETRES                   
    **/
    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;

        }   
}
?>