Bonjours,
A 40eme minute du tutoriel après avoir enlever les die() je me retrouve avec la page d'ereur alors que je devrais me retrouver avec la Premier Page
voici le code de Model.php
<?php
class Model{
static $connections = array();
public $conf = 'default';
public $table = false;
public $db;
public function __construct(){
// Je me connecte à la base
$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 NAMES utf8')
);
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
Model::$connections$this->conf] = $pdo;
$this->db = $pdo;
}catch(PDOException $e){
if(Conf::$debug >= 1){
die($e->getMessage());
}else{
die('Impossible de se connecter a la base de donnée');
}
}
// J'initialise quelques variable
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'conditions'] 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));
}
}
De PagesController.php
<?php
class PagesController extends Controller{
function view($id){
$this->loadModel('Post');
$posts = $this->Post->findFirst(array(
'conditions' => array('id'=>$id)
));
if(empty($post)){
$this->e404('Page introuvable');
}
$this->set('post',$post);
}
}
Du 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
* @param $request Objet 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 une ou plusieurs variable à la vue
* @param $key Nom de la variable OU tableu de 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 gérer les erreurs 404
**/
function e404($message){
header("HTTP/1.0 404 Not Found");
$this->set('message',$message);
$this->render('/errors/404');
die();
}
}
?>
Et enfin du Dispatcher.php
<?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 méthode '.$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->e404($message);
}
function loadController(){
$name = ucfirst($this->request->controller).'Controller';
$file = ROOT.DS.'controller'.DS.$name.'.php';
require $file;
return new $name($this->request);
}
}
Quelqu’un peu m'aider
Merci d'avance
J'ai résolu mon problème : J'avais mis un 's' a post de la ligne 6 de PageController