Bonjours à tous. Aujourd'hui je faisait tranquillement le tutoriel quand soudain j'arrive à 6:46 de vidéo. Je ne trouve pas la page comme indioquer sur la vido mais j'ai un message d'erreur :

Fatal error: Call to private Model::__construct() from context 'Controller' in C:\wamp\www\Site Tuto\core\Controller.php on line 61
Call Stack

Time Memory Function Location

1 0.0005 143928 {main}( ) ..\index.php:0
2 0.0030 170088 Dispatcher->__construct( ) ..\index.php:10
3 0.0034 174632 call_user_func_array ( ) ..\Dispatcher.php:13
4 0.0034 174728 PagesController->view( ) ..\Dispatcher.php:13
5 0.0034 174800 Controller->loadModel( ) ..\PagesController.php:6

En gros il m'indique une erreur à la ligne 61 du controller.php: voici mon controller.php:

<?php
/**
*Controller
**/
class Controller{
    public $request; // Objet Request
    private $vars = array();    // Variables à passer à la vue
    public $layout = 'default'; // Layout à utiliser pour rendre la vue
    private $rendered = false;  // Si le rendu a été fait ou pas ?
    /**
    *Constructeur
    * @params $request Objet request de notre application
    **/
    function __construct($request){
        $this->request = $request;
    }

    /**
    * Permet de rendre une vue
    * @params $view Fichier à rendre (chemin depuis view ou nom de la vue)
    **/
    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;
    }

    /**
    * Permet de passer une ou plusieurs variables à la vue
    * @param $key nom de la variable oOU tableau de la variable
    * @param $value Valeur de la variable
    **/
    public function set($key,$value=null){
        if(is_array($key)){
            $this->vars += $key;
        }else{
            $this->vars$key] = $value;
        }
    }

    /**
    * Permet de charger un model au niveau du controller
    **/
        function loadModel($name){
            $file = ROOT.DS.'model'.DS.$name.'.php';
            require_once($file);
            if(!isset($this->$name)){
                $this->$name = new $name();
            }else{
                echo 'pas chargé';
            }
        }
}
?>

A la ligne 61, je ne trouve pas mon erreur.

Sinon mon post.php :

<?php
class Post extends Model{

}
?>

Et mon pagescontroller.php :

<?php
class PagesController extends Controller{

    function view(){
        $this->loadModel('Post');
        $this->loadModel('Post');
    }   
}
?>

Savez-vous d'où viendrait mon erreur sil vous plaît.
Merci d'avance pour vos futurs réponse.

5 réponses


Tackacoder
Réponse acceptée

Bonjour,
Essai d'ajouter public devant toutes tes methodes (function) qui n'ont pas public, private, static.

Bonsoir,
essais avec :
public function loadmodel($name)

Romain72
Auteur

Merci de m'avoir répondu mais il me marque toujours la même erreur. Je n'ai pas un problème avec la ligne 61 ?

C'est normal que tu aie cette ligne 2 fois

$this->loadModel('Post');

dans ton pagescontroller.php ?

Romain72
Auteur

C'est bon, j'ai rajouter public devant la function view merci de m'avoir aidé :)