Application du MVC en PHP
Voyons l'application conjointe de tout ce qui a été étudié. Supposons, par exemple, que nous ayons sur le site des articles-pages. Nous voulons soit afficher un article, soit afficher tous les articles. Voyons comment le faire dans notre framework.
Table en base de données
Pour commencer, créons une table pages
dans la base de données. Ajoutons-y les colonnes id,
title et text. Remplissons cette
table avec quelques données
via PhpMyAdmin.
Modèle
Créons un modèle avec une méthode pour obtenir un enregistrement et une méthode pour obtenir tous les enregistrements :
<?php
namespace Project\Models;
use \Core\Model;
class Page extends Model
{
public function getById($id)
{
return $this->findOne("SELECT * FROM pages WHERE id=$id");
}
public function getAll()
{
return $this->findMany("SELECT id, title FROM pages");
}
}
?>
Routage
Configurons le routage correspondant :
<?php
use \Core\Route;
return [
new Route('/page/:id', 'page', 'one'),
new Route('/pages/', 'page', 'all'),
];
?>
Contrôleur
Créons le contrôleur :
<?php
namespace Project\Controllers;
use \Core\Controller;
use \Project\Models\Page;
class PageController extends Controller
{
public function one($params)
{
$page = (new Page) -> getById($params['id']);
$this->title = $page['title'];
return $this->render('page/one', [
'text' => $page['text'],
'h1' => $this->title
]);
}
public function all()
{
$this->title = 'Liste de toutes les pages';
$pages = (new Page) -> getAll();
return $this->render('page/all', [
'pages' => $pages,
'h1' => $this->title
]);
}
}
?>
Vues
Créons la vue pour la méthode one :
<h1><?= $h1; ?></h1>
<div id="content">
<?= $text; ?>
</div>
Créons la vue pour la méthode all :
<h1><?= $h1; ?></h1>
<div id="content">
<table>
<tr>
<th>id</th>
<th>title</th>
<th>lien</th>
</tr>
<?php foreach ($pages as $page): ?>
<tr>
<td><?= $page['id']; ?></td>
<td><?= $page['title']; ?></td>
<td><a href="/page/<?= $page['id']; ?>/">lien vers la page</td>
</tr>
<?php endforeach; ?>
</table>
</div>
Tâches pratiques
Supposons que vous ayez des produits dans votre base de données.
Chaque produit contient un nom, un prix,
une quantité et une description. Implémentez l'affichage d'un
produit par id et de tous les produits de manière similaire
à ce qui est fait dans la théorie.