Encore et toujours un problème, décidement ...
Quand je marque dans ma barre d'adresse .../pages/view/1 ou ...pages/view/2. Il m'indiquent page introuvable. Alors que dans mon fichier post dans le phpmyadmin j'ai bien indiquer le 1 et le 2. Surtout que avant d'avoir faire les réglages pour les guillemets, les deux posts marchaient bien. Voici mes lignes de codes :*
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->bd = Model::$connections$this->conf];
            return true;
        }
        try{
            $pdo = new PDO(
                'mysql:dbname='.$conf'databases'].';host='.$conf'host'], $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 à la base de donné');
            }
        }

        // 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'conditions'] as $k=>$v){
                    if(!is_numeric($v)){
                        $v = '"'.mysql_real_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));
    }

}
?>

Mon 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',$posts);
    }   

}
?>

et 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();  
            } 
        }
    /**
    *Permet de gérer les erreur 404
    **/
    function e404($message){
        header("HTTP/1.0 404 Not Found");
        $this->set('message',$message);
        $this->render('/errors/404');
        die();
    }
}
?>

Merci d'avance pour vos futurs réponses.

3 réponses


Tackacoder
Réponse acceptée

Bonjour,

if(empty($post)){

te manque le s

Romain72
Auteur

Merci encore une foi

Une fois* il te manque le "s" mais je sais pas si c'est ça qui fait planter le script.