Controllers
Méthode : Modifications
Dans chaque fichier, nous conservons uniquement le code situé avant le doctype et mettons à jour les URLs des require.
Nous ajoutons un require pointant vers la vue correspondante.
Nous devons garder à l’esprit que le fichier initial qui lance nos scripts se trouve dans le dossier public ou dans l’un de ses sous-dossiers. Nous raisonnons donc comme si nous étions dans le dossier de ce fichier, et toutes les URLs sont relatives à l’emplacement du fichier initial qui appelle nos controllers.
Pour les fichiers qui ne contiennent pas de HTML, nous laissons la balise PHP ouverte.
app/controllers/home/index.php
// ==============================// INCLUSION DE LA VUE// ==============================require '../app/views/home/index.php';
app/controllers/utilisateur/index.php
// ==============================// INCLUSION DES FONCTIONS// ==============================require '../../app/models/model.php';
// ==============================// RÉCUPÉRATION DE LA LISTE// ==============================$listeUtilisateurs = all('utilisateurs');
// ==============================// VARIABLES POUR LA VUE// ==============================// Chemin de base pour les inclusions$page_base = '../';
// Titre dynamique de la page$page_title = 'Afficher les utilisateurs';
// Feuilles de styles spécifiques à la page$page_styles = ['utilisateur', 'card'];
// ==============================// INCLUSION DE LA VUE // ==============================require '../../app/views/utilisateur/index.php';
app/controllers/utilisateur/show.php
// ==============================// INCLUSION DES FONCTIONS// ==============================require '../../app/models/model.php';
// ==============================// RÉCUPÉRATION DE L’ID// ==============================// récupération de l'ID dans l'URL$id = (int) ($_GET['id'] ?? 0);
// ==============================// RÉCUPÉRATION DE L’UTILISATEUR// ==============================$utilisateur = find('utilisateurs', $id);
// Si aucun utilisateur n’est trouvé → redirection vers la listeif (!$utilisateur) {
header('location:../utilisateur/index.php');
exit();}
// ==============================// VARIABLES POUR LA VUE// ==============================// Chemin de base pour les inclusions$page_base = '../';
// Titre dynamique de la page$page_title = "Afficher-{$utilisateur['nom']}";
// Feuilles de styles spécifiques à la page$page_styles = ['utilisateur', 'card'];
// ==============================// INCLUSION DE LA VUE // ==============================require '../../app/views/utilisateur/show.php';
app/controllers/utilisateur/create.php
// ==============================// INCLUSION DES FONCTIONS DU MODÈLE// ==============================require '../../app/models/model.php';
// ==============================// INCLUSION HELPERS// =============================require '../../app/helpers.php';
// ==============================// TRAITEMENT DU FORMULAIRE// ==============================if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['ajouter'])) {
// ------------------------------ // RÉCUPÉRATION DES DONNÉES // ------------------------------ // Nettoyage des champs texte$nom = trim($_POST['nom'] ?? '');
$prenom = trim($_POST['prenom'] ?? '');
// Cast en entier pour le champ âge$age = (int) ($_POST['age'] ?? 0);
// Slug utilisé pour l’URL et le nom du fichier photo$baseSlug = slug("$prenom-$nom");
$slug = $baseSlug;
$i = 1;
// Tant qu’un enregistrement existe avec ce slug, on ajoute un suffixe numériquewhile (where('utilisateurs', ['slug' => $slug])) {
$slug = "{$baseSlug}_{$i}";
$i++;
}
// ------------------------------ // GESTION DE LA PHOTO // ------------------------------ // Dossier relatif de stockage des photos // par rapport à la racine du projet$relDir = '../';
// Dossier de stockage des photos$photoDir = 'images/photos/';
// Création du dossier s’il n’existe pasif (!is_dir($relDir . $photoDir)) {
mkdir($relDir . $photoDir, 0755, true);
}
// Cas 1 : une photo a été uploadée if (isset($_FILES['photo']) &&
is_uploaded_file($_FILES['photo']['tmp_name'])
) { // Récupération de l’extension du fichier (en minuscule)$extension = strtolower(
pathinfo($_FILES['photo']['name'], PATHINFO_EXTENSION)
);
// Nom final du fichier photo$photo = "{$photoDir}{$slug}.{$extension}";
// Déplacement du fichier temporaire vers le dossier photos move_uploaded_file($_FILES['photo']['tmp_name'],
"{$relDir}{$photo}"
);
// Cas 2 : aucune photo envoyée → image par défaut } else { // Nom de la photo par défaut$photo = "{$photoDir}{$slug}.png";
// Copie de l’image générique copy("{$relDir}{$photoDir}photo.png",
"{$relDir}{$photo}"
);
}
// ------------------------------ // INSERTION EN BASE DE DONNÉES // ------------------------------create('utilisateurs', compact('nom', 'prenom', 'age', 'slug', 'photo'));
// ------------------------------ // REDIRECTION // ------------------------------ // Redirection après succès (évite la resoumission du formulaire)header('location:../utilisateur/index.php');
exit;}
// ==============================// VARIABLES POUR LA VUE// ==============================// Chemin de base pour les inclusions$page_base = '../';
// Titre dynamique de la page$page_title = 'Ajouter un utilisateur';
// Feuilles de styles spécifiques à la page$page_styles = ['utilisateur', 'form'];
// Inclusion du templaterequire '../../app/views/utilisateur/create.php';
app/controllers/utilisateur/update.php
// ==============================// INCLUSION DES FONCTIONS// ==============================require '../../app/models/model.php';
// ==============================// INCLUSION HELPERS// =============================require '../../app/helpers.php';
// ==============================// RÉCUPÉRATION DE L’ID // ==============================$id = (int) ($_GET['id'] ?? 0);
// ==============================// RÉCUPÉRATION DE L’UTILISATEUR// ==============================// Récupération de l'utilisateur$utilisateur = find('utilisateurs', $id);
// Si aucun utilisateur n’est trouvé, redirection vers la listeif (!$utilisateur) {
header('location:../utisateur/index.php');
exit;}
// ==============================// TRAITEMENT DU FORMULAIRE// ==============================// Vérification de la soumission du formulaireif ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['modifier'])) {
// Sauvegarde de l’ancien slug (utile pour renommer la photo)$oldSlug = $utilisateur['slug'];
// Récupération et nettoyage des champs du formulaire$nom = trim($_POST['nom'] ?? '');
$prenom = trim($_POST['prenom'] ?? '');
$age = (int) ($_POST['age'] ?? 0);
// ------------------------------ // Génération du slug à partir du prénom et du nom // ------------------------------$baseSlug = slug("$prenom-$nom");
$slug = $baseSlug;
$i = 1;
// Tant qu’un enregistrement existe avec ce slug, on ajoute un suffixe numériquewhile (where('utilisateurs', ['slug' => $slug])) {
$slug = "{$baseSlug}_{$i}";
$i++;
}
// ------------------------------ // GESTION DE LA PHOTO // ------------------------------ // Dossier relatif de stockage des photos // par rapport à la racine du projet$relDir = '../';
// Dossier de stockage des photos$photoDir = 'images/photos/';
// Par défaut, on conserve la photo existante$photo = $utilisateur['photo'];
// Création du dossier s’il n’existe pasif (!is_dir($relDir . $photoDir)) {
mkdir($relDir . $photoDir, 0755, true);
}
// Chemin complet de l’ancienne photo$oldPathPhoto = "{$relDir}{$photo}";
// ------------------------------ // RENOMMAGE DE LA PHOTO SI LE SLUG A CHANGÉ // ------------------------------ // Si le slug a changé et que la photo existeif ($oldSlug !== $slug && is_file($oldPathPhoto)) {
// Récupération de l’extension du fichier$extension = pathinfo($oldPathPhoto, PATHINFO_EXTENSION);
// Nouveau nom de fichier$photo = "{$photoDir}{$slug}.{$extension}";
// Renommage du fichier sur le serveurrename($oldPathPhoto, "{$relDir}{$photo}");
}
// ------------------------------ // UPLOAD D’UNE NOUVELLE PHOTO // ------------------------------ // Vérifie qu’un fichier a bien été envoyé if (isset($_FILES['photo']) &&
is_uploaded_file($_FILES['photo']['tmp_name'])
) { // Suppression de la photo si elle existeif (is_file("{$relDir}{$photo}")) {
unlink("{$relDir}{$photo}");
}
// Récupération de l’extension de la nouvelle photo$extension = pathinfo($_FILES['photo']['name'], PATHINFO_EXTENSION);
// Nouveau nom de fichier$photo = "{$photoDir}{$slug}.{$extension}";
// Déplacement du fichier temporaire vers le dossier photos move_uploaded_file($_FILES['photo']['tmp_name'],
"{$relDir}{$photo}"
);
}
// ------------------------------ // MISE À JOUR EN BASE DE DONNÉES // ------------------------------update('utilisateurs', compact('nom', 'prenom', 'age', 'slug', 'photo', 'id'));
// Redirection après succèsheader('location:../utilisateur/index.php');
exit;}
// ==============================// VARIABLES POUR LA VUE// ==============================// Chemin de base pour les inclusions$page_base = '../';
// Titre dynamique de la page$page_title = "Modifier-{$utilisateur['nom']}";
// Feuilles de styles spécifiques à la page$page_styles = ['utilisateur', 'card', 'form'];
// ==============================// INCLUSION DE LA VUE// ==============================require '../../app/views/utilisateur/update.php';
app/controllers/utilisateur/delete.php
// ==============================// INCLUSION DES FONCTIONS DU MODÈLE// ==============================require '../../app/models/model.php';
// ==============================// RÉCUPÉRATION DE L’ID // ==============================$id = (int) ($_GET['id'] ?? 0);
// ============================== // RÉCUPÉRATION DE L’UTILISATEUR // ============================== $utilisateur = find('utilisateurs', $id);
if (!$utilisateur) {
header('location:../utilisateur/index.php');
exit;}
// ==============================// TRAITEMENT DU FORMULAIRE// ==============================// Vérification de la soumission du formulaireif ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['supprimer'])) {
// suppression de l'utilisateurdelete('utilisateurs', $id);
// Dossier relatif de stockage des photos // par rapport à la racine du projet$relDir = '../';
// suppression de la photo si elle existeif (is_file("{$relDir}{$utilisateur['photo']}")) {
unlink("{$relDir}{$utilisateur['photo']}");
}
// redirectionheader('location:../utilisateur/index.php');
exit;}
// ==============================// VARIABLES POUR LA VUE// ==============================// Chemin de base pour les inclusions$page_base = '../';
// Titre dynamique de la page$page_title = "Supprimer-{$utilisateur['nom']}";
// Feuilles de styles spécifiques à la page$page_styles = ['utilisateur', 'card', 'form'];
// ==============================// INCLUSION DE LA VUE// ==============================require '../../app/views/utilisateur/delete.php';