Ceci est une démonstration de ce que vous allez pouvoir bientôt réaliser avec davantage de complexité.
Comme vous devez le savoir, MVC signifie Modèle-Vue-Contrôleur et PDO Php-Data-Object.
Modèle-Vue-Contrôleur
Php-Data-Object
Il est nécessaire d’avoir installé sur votre machine le serveur Apache, la base de données MySQL et PHP. Vous pouvez le faire facilement en installant WAMP ou XAMPP selon vos préférences. WAMP est destiné au système Windows.
Pour cet exemple, il n’y a pas de CSS pour la mise en forme.
- /AppliTaches - /controller - TaskController.php - /model - TaskModel.php - /views - task-list.php - index.php
le fichier index.php est le point d’accès de notre application web basique.
index.php
Vous pouvez nommer votre BD bd-tasks.
bd-tasks
CREATE TABLE IF NOT EXISTS `task` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(255) NOT NULL, `description` text, `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8; -- -- ajouter des enregistrements à notre table -- INSERT INTO `task` (`id`, `title`, `description`, `created_at`, `updated_at`) VALUES (1, 'Dormir', 'Pour reposer son cerveau après une journée de glandouille', '2023-11-10 10:38:02', NULL), (2, 'Caresser le chat', 'ça permet de se détendre au son du ronronnement', '2023-11-10 10:38:02', NULL), (3, 'Ne rien faire', 'Pas facile, mais ça dépend pour qui', '2023-11-10 10:38:02', NULL), (4, 'Jouer à Steam ', 'Pour se défouler un peu', '2023-11-10 10:38:02', NULL), (5, 'Programmer en php', 'Pour construire un site simple', '2023-11-10 10:38:02', NULL), (6, 'Programmer en java', 'Parce que c\'est cool la POO !', '2023-11-15 19:59:40', NULL), (7, 'Glander', 'Oui oui, c\'est une activité, ça demande de la concentration', '2023-11-10 10:38:02', NULL), (8, 'Entraîner ma tortue pour le marathon', 'A force de parcourir sans cesse son vivarium, elle est endurante', '2023-11-10 10:38:02', NULL), (9, 'Organiser une conférence sur le nombre Zéro', 'Comme ça il n\'y aura pas grand chose à préparer !)', '2023-11-10 10:38:02', NULL), (10, 'Créer des diplômes pour des compétences inutiles', 'Faut bien trouver un truc à faire', '2023-11-10 10:38:02', NULL), (11, 'Hypnotiser les élèves', 'Comme ça, ils seront tous détendus et apprendront sans effort !', '2023-11-10 10:53:39', NULL);
TaskModel.php
A quoi peut bien servir un fichier de modèle d’une tâche ?
Il va tout simplement nous permettre d’effectuer les opérations de bases sur la table task. En réalité, il devrait y avoir plusieurs fichiers (Entity, Repository, Service ainsi que des interfaces), cependant pour une démonstration simple, nous réduisons la complexité.
task
<?php class TaskModel { // déclaration des variables private $db; // constructeur public function __construct(PDO $pdo) { $this->db = $pdo; } // Fonction qui permet de récupérer toutes les tâches enregitrées dans la table public function getAllTasks() { $query = "SELECT * FROM tasks"; // on sélectionne toutes les tâches $stmt = $this->db->prepare($query); // on utilise une requête préparée pour des raisons de sécurité $stmt->execute(); // on exécute la requête qui renvoie un statement cad une "instruction", un résultat return $stmt->fetchAll(PDO::FETCH_ASSOC); } // Fonction qui permet d'ajouter une tâche dans la table en recevant des arguments public function addTask($title, $description) { $query = "INSERT INTO tasks (title, description) VALUES (?, ?)"; $stmt = $this->db->prepare($query); $stmt->execute([$title, $description]); return $this->db->lastInsertId(); } } ?>
TaskController.php
<?php class TaskController { // Ce controleur va utiliser le modèle TaskModel private $model; // Constructeur avec un argument public function __construct(TaskModel $model) { $this->model = $model; } // fonction qui utilise une fonction du modèle et envoie le résultat vers une vue HTML public function listTasks() { $tasks = $this->model->getAllTasks(); require('views/task-list.php'); } // fonction qui utilise une fonction du modèle pour créer une nouvelle tâche et renvoyer vers index.php (notre Vue) public function createTask($title, $description) { $taskId = $this->model->addTask($title, $description); header('Location: index.php'); } } ?>
task-list.php
Le fichier qui combine le HTML et le PHP est ici volontairement simplifié.
<!DOCTYPE html> <html lang="fr"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Gestion des tâches</title> </head> <body> <h1>Liste des tâches</h1> <ul> <?php foreach ($tasks as $task) : ?> <li><?php echo $task['title']." : ".$task['description']; ?></li> <?php endforeach; ?> </ul> <h2>Nouvelle tâche</h2> <form action="index.php" method="post"> <label for="title">Titre : </label> <input type="text" name="title" required> </br> <label for="description">Description : </label> <textarea name="description"></textarea> </br> <input type="submit" value="Ajouter"> </form> </body> </html>
<?php // Connexion à la base de données try { $pdo = new PDO('mysql:host=localhost;dbname=bd-tasks', 'test', 'test'); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { die("Erreur de connexion à la base de données : " . $e->getMessage()); } // Charger les classes que nous allons utiliser require('models/TaskModel.php'); require('controllers/TaskController.php'); // Instancier les classes $model = new TaskModel($pdo); $controller = new TaskController($model); // Traitement de la soumission du formulaire si on reçoit une requête if ($_SERVER['REQUEST_METHOD'] === 'POST') { if (isset($_POST['title']) && isset($_POST['description'])) { $title = $_POST['title']; $description = $_POST['description']; $controller->createTask($title, $description); } } // Afficher la liste des tâches par défaut // en appelant la méthode la méthode du contrôleur $controller->listTasks(); ?>
Dans cet exemple simple, nous avons créé une application de gestion de tâches utilisant le modèle MVC.
Lorsque vous accédez à index.php, vous voyez la liste des tâches et vous pouvez en ajouter de nouvelles.
Le formulaire est dans la page (index.php) pour simplifier et les données sont traitées par le contrôleur.
Cet exemple volontairement simple vous montre comment créer une application web en PHP 8 en respectant le modèle MVC et en utilisant PDO pour accéder à une base de données MySQL.
Vous pouvez améliorer cette application en ajoutant d’autres fonctionnalités du CRUD (Create, Read, Update et Delete).
CRUD