Easy-Micro

LANGAGE MVC PHP
Solution

Utilisez une architecture MVC en PHP : Solution de la mise en pratique

Modifier des commentaires

Cette fois, on aimerait permettre aux lecteurs de modifier des commentaires sur les billets. Que faut-il faire ? On va faire les choses dans cet ordre :
  1. Écrire le modèle.
  2. Écrire le contrôleur, pour récupérer les informations et les envoyer à la vue.
  3. Écrire la vue, pour afficher les informations.
  4. Mettre à jour le routeur, pour envoyer vers le bon contrôleur.

1. Ecriture du modèle

Il suffit d'ajouter une fonction changeComment dans model/CommentManager.php qui ajoute un commentaire en base :

model/frontend.php :
<?php

//...

public function changeComment($postId, $author, $comment) {
    $db = dbConnect();
    $comments = $db->prepare('UPDATE comments SET comment = ?, author = ?, comment_date = NOW()  WHERE post_id = ? LIMIT 1";
    $affectedLines = $comments->execute(array($postId, $author, $comment));

    return $affectedLines;
}

Rien de bien sorcier. Il faut juste penser à récupérer en paramètres les informations dont on a besoin :
  • L'ID du commentaire
  • Le nom de l'auteur
  • Le contenu du nouveau commentaire
Le reste des informations (la date) sera généré automatiquement.

2. Écriture du contrôleur

Le contrôleur controller/frontend.php récupère lui aussi les informations dont on a besoin (id du billet, auteur, commentaire) et les transmet au modèle :

controller/frontend.php
<?php

// ...

function changeComment($postId, $author, $comment) {
    $affectedLines = postComment($postId, $author, $comment);

    if ($affectedLines === false) {
        die('Impossible de modifier le commentaire !');
    }
    else {
        header('Location: index.php?action=post&id=' . $postId);
    }
}

3. Mise à jour de la vue

Il faut aussi modifier un peu la vue qui affiche un billet et ses commentaires (view/frontend/listPostsView.php). En effet, nous devons ajouter le lien vers le formulaire pour pouvoir modifier des commentaires !
view/frontend/listPostsView.php :
<?php $title = 'Mon blog'; ?>

<?php ob_start(); ?>
<h1>Mon super blog !</h1>
<p>Derniers billets du blog :</p>


<?php
while ($data = $posts->fetch()) {
?>
    <div class="news">
        <h3>
            <?= htmlspecialchars($data['title']) ?>
            <em>le <?= $data['creation_date_fr'] ?></em>
    (<a href="post.php?id=<?= $data['id'] ?>">modifier</a>)
        </h3>
        
        <p>
            <?= nl2br(htmlspecialchars($data['content'])) ?>
            <br>
            <em><a href="post.php?id=<?= $data['id'] ?>">Commentaires</a></em>
        </p>
    </div>
<?php
}
$posts->closeCursor();
?>
<?php $content = ob_get_clean(); ?>

<?php require('view/frontend/template.php'); ?>

4. Mise à jour du routeur

Ajoutons un elseif dans notre routeur (index.php) pour appeler le nouveau contrôleur changeComment qu'on vient de créer, et on devrait avoir tout bon !
index.php :
<?php
require('controller/frontend.php');

if (isset($_GET['action'])) {
    if ($_GET['action'] == 'listPosts') {
        listPosts();
    }
    elseif ($_GET['action'] == 'post') {
        if (isset($_GET['id']) && $_GET['id'] > 0) {
            post();
        }
        else {
            echo 'Erreur : aucun identifiant de billet envoyé';
        }
    }
    elseif ($_GET['action'] == 'changeComment') {
        if (isset($_GET['id']) && $_GET['id'] > 0) {
            if (!empty($_POST['author']) && !empty($_POST['comment'])) {
                changeComment($_GET['id'], $_POST['author'], $_POST['comment']);
            }
            else {
                echo 'Erreur : tous les champs ne sont pas remplis !';
            }
        }
        else {
            echo 'Erreur : aucun identifiant de billet envoyé';
        }
    }
}
else {
    listPosts();
}

> Voir cet exemple Easy-Micro

« Prev - Architecture MVC en PHP - Next »


< Page précédente MVC PHP Page suivante >