début d'un MVC avec PDO et Objet
Bonjour et Joyeuses Fêtes.
J'ai commencé à mettre en pratique à partir d'un simple affichage, une méthode MVC orienté objet et PDO. Ce dont je cherche à faire, c'est de créer une simple affichage afin d'avoir une opinion à savoir si je suis dans la bonne voie pour créer un début de site en MVC.
Mes fichiers :
fichier index.php:
<?php
include_once('bdd.php');
include_once('controler.php');
?>
fichier bdd.php:
<?php
define('USERNAME2', 'root');
define('PASSWORD2', '');
define('DSN2', "mysql:host=localhost;dbname=ptg");
class pdo_mysql
{
private static $_instance;
public static function &pdo_connection()
{
if(!self::$_instance)
{
try
{
self::$_instance = new PDO(DSN2, USERNAME2, PASSWORD2);
self::$_instance->setAttribute(PDO::ATTR_PERSISTENT, true);
self::$_instance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $est)
{
die("pdo connection error! " . $est->getMessage() . "<br/>");
}
}
return self::$_instance;
}
private function __construct()
{}
private function __clone()
{}
}
?>
fichier controler.php:
<?php
include_once('model.php');
$artiste = new Artiste();
$artiste = $artiste->artiste(0, 1);
include_once('vue.php');
?>
fichier model.php:
<?php
include_once('bdd.php');
abstract class Model extends pdo_mysql
{
private $_conn;
protected $_pk;
private $offset;
private $limit;
public function __construct()
{
$this->_conn = pdo_mysql::pdo_connection();
}
public function getOffset()
{
return $this->offset;
}
public function setOffset($offset)
{
$this->offset = (int)$offset;
}
public function getLimit()
{
return $this->limit;
}
public function setLimit($limit)
{
$this->limit = (int)$limit;
}
public function artiste($offset, $limit)
{
$stmt = $this->_conn->prepare("SELECT * FROM {$this->table} ORDER BY id_artiste DESC LIMIT :offset, :limit");
$stmt->bindParam(':offset', $this->offset, PDO::PARAM_INT);
$stmt->bindParam(':limit', $this->limit, PDO::PARAM_INT);
$stmt->execute();
return $stmt->fetchAll(PDO::FETCH_OBJ);
}
}
class Artiste extends Model
{
protected $table = 'artiste';
public function __construct()
{
parent::__construct();
$this->_pk = 'id_artiste';
}
}
?>
fichier vue.php:
<!DOCTYPE html>
<html>
<head>
<title>Liste des Artistes</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link href="style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<h1>Liste des Artistes</h1>
<?php
foreach($artiste as $a)
{
?>
<div class="news">
<?php echo $a->nom_artiste; ?>
<?php echo $a->prenom_artiste; ?>
</div>
<?php
}
?>
</body>
</html>
Réponses apportées à cette discussion
Ton fichier controler.php présente une curiosité :
$artiste = new Artiste();
$artiste = $artiste->artiste(0, 1);
Tu définis la variable $artiste en lui assignant un objet : la ligne suivante, tu lui assignes une propriété de ce même objet.
C'est assez illogique : essaye d'ajouter une ligne en créant une nouvelle variable à laquelle tu assignerais une autre propriété de l'objet, par exemple :
<?php
include_once ('model.php');
$artiste = new Artiste();
$artiste = $artiste->artiste(0, 1);
$autrevariable = $artiste->artiste(0, 1);
include_once ('vue.php');
?>
Essaye ça et observe ce qui se passe...