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
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::$databases$this->conf];
if(isset(Model::$connections$this->conf])){
$this->db = Model::$connections$this->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::$connections$this->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->vars$key] = $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();
}
}
?>
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
Salut,
J'ai vraiment suivit le tutorial à la lettre . J'ai essayer ce n'est pas sa.
Merci quand même
guillaume
salut
avez vous trouver une réponse j'ai le même problème ?
merci
Bonjour à tous. j'ai le même problème. avez vous trouvé une solution ?
Merci d'avance.