Problème avec PagesController - Undefined property...

Par guillaume_r, il y a 14 ans


Bonjour,

Je suis actuellement entrain de suivre le tuto PHP et lors de la "ème vidéo (jour 3), j'ai rencontré des difficultés. En effet, j'obtient l'erreur : Undefined property-PagesController::$Post in ....PagesController.php on line 8
ainsi que Call to member function find() on a non-object in ....PagesController.php on line 8

Voila je remercie d'avance tout ceux qui pourront m'aider. Je tiens a préciser que j'ai continué a avancer dans le tutorial malgré l'erreur, Mais l'erreur correspond à peu près à la 20ème minute du tutorial 3. Je n'ai jamais réussi a faire apparaître les texte présent dans ma base de donnée.

Guillaume

Model

<?php
class Model{

static $connections = array();

public $conf = 'default';
public $table = false;
public $db = 'default';

public function __construct(){
//connection à la database
conf = Conf::databasesthis->conf]; if(isset(Model::connectionsthis->conf])){ $this->db = Model::connectionsthis->conf]; return true; } try{ $pdo = new PDO('mysql:host='.conf'host'].';dbname='.conf'database'],conf'login'],$conf'password'],
array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAME utf8')
);
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);

Model::connectionsthis->db]=pdo; } catch(PDOException $e){ if(Conf::debug >= 1){
die($e->getMessage());
}else{
die('impossible de se connecter à la base de donnée');
}
}
//j'initialise quelques variables

if(this->table === false){ $this->table = strtolower(get\_class(this)).'s';
}
}

public function find(req){ $sql = 'SELECT \* FROM '.this->table.' as '.get_class($this).'';

//Construction de la condition
if(isset(req'conditions'])){ $sql.='WHERE'; if(!is\_array(req'conditions'])){
sql .=req'conditions'];

}else{
cond =array (); foreach(req'condition']as k=>v){
if(!is_numeric(v)){ $v = '"'. mysql\_escape\_string(v).'"';

}
cond]= "k=v"; } $sql .=implode('AND',cond);

}

}
pre = $this->db->prepare(sql);
$pre->execute();
return $pre->fetchAll(PDO::FETCH_OBJ);
}

public function findFirst(req){ return current(this->find($req));

}
}
?>

et donc ensuite mon page controller

<?php
class PagesController extends Controller{

function view(id){ $this->loadModel('Post'); $d'page'] = $this->Post->find(array('condition'=>array('id'=>id,'type'=>'page')
));
if(empty(d'page'])){ $this->e404('page introuvable'); } $d'pages'] =this->Post->find(array('condition'=>array('type'=>'page')));
this->set(d);
}

}
?>

et pour finir mon controller

<?php

/**
*controller
**/
class Controller{

public $Request; //Objet request
private $vars =array(); //Variable à passer à la vue
public $layout = 'default'; //Layout a utilisé pour rendre la vue
private $rendered =false; //Si le rendu visuelle a été fait ou pas. (Eviter les doublons d'affichage)

/**
*Constructeur
*@param $request Objet request de notre application
**/

function __construct($Request){
$this->Request = $Request; // On stock la request dans l'instance
}

/**
*Permet de rendre une vue
*@param $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 un ou plusieurs variable à la vue
*@param $keynom de la variable ou tableau de la variables
*@param $value valeur de la variable
**/

public function set(key,value = null){
if(is_array(key)){ $this->vars += $key; } else{ $this->varskey] = $value;
}
}

/**
*Permet de charger un model
**/

function loadModel(name){ $file = ROOT.DS.'model'.DS.name.'.php';
require_once(file); if(isset(this->name)){ $this->name = new $name();
}
}
/**
*Permet de gerer les erruer 404
**/

function e404(message){ header("HTTP:1.0 404 Not Found"); $this->set('message',message);
$this->render('/errors/404');
die();
}

}
?>

4 réponses

homesoftware, il y a 10 ans

Bonjour à tous. j'ai le même problème. avez vous trouvé une solution ?

Merci d'avance.

erfou, il y a 14 ans

Salut,

dans controller, je ne comprends pas le test
if(isset(this->name)){
this->name = new $name();
}

en gros, ca crée le this->name ssi il existe deja. essaie en mettant if(!isset(....))

Eric

guillaume_r, il y a 14 ans

Salut,

J'ai vraiment suivit le tutorial à la lettre . J'ai essayer ce n'est pas sa.

Merci quand même

guillaume

inda, il y a 13 ans

salut
avez vous trouver une réponse j'ai le même problème ?
merci