Bonsoir,
essais avec :
public function loadmodel($name)
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
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 ?
Bonjour,
Essai d'ajouter public devant toutes tes methodes (function) qui n'ont pas public, private, static.
C'est normal que tu aie cette ligne 2 fois
$this->loadModel('Post');
dans ton pagescontroller.php ?
C'est bon, j'ai rajouter public devant la function view merci de m'avoir aidé :)