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.