début d'un MVC avec PDO et Objet

Rechercher

début d'un MVC avec PDO et Objet

Par dancom5  -  1 reponse  -  Le 26/12/2013 07:46  -  Editer  - 

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

Par Cyrano  -  Le 28/12/2013 10:51  -  Haut de page  - 

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...

 

Ajouter une réponse à la discussion

Seuls les membres connectés sont autorisés à poster dans les forums !

Identifiez-vous
Join |  ID/MDP? |