Easy-Micro

LANGAGE MVC PHP
Nouvelle fonctionnalité

Utilisez une architecture MVC en PHP : Proposer des commentaires

Ajouter des commentaires

Cette fois, on aimerait permettre aux lecteurs d'ajouter des commentaires sur les billets. Que faut-il faire ? On va faire les choses dans cet ordre :
  • Écrire le modèle (et créer au besoin des tables en base).
  • Écrire le contrôleur, pour récupérer les informations et les envoyer à la vue.
  • Écrire la vue, pour afficher les informations.
  • Mettre à jour le routeur, pour envoyer vers le bon contrôleur.

Ecriture du modèle

Il suffit d'ajouter une petite fonction postComment dans model/frontend.php qui ajoute un commentaire en base :

model/frontend.php :
<?php

//...

function postComment($postId, $author, $comment) {
    $db = dbConnect();
    $comments = $db->prepare('INSERT INTO comments(post_id, author, comment, comment_date) VALUES(?, ?, ?, NOW())');
    $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 billet auquel se rapporte le commentaire
  • Le nom de l'auteur
  • Le contenu du commentaire
Le reste des informations (l'ID du commentaire, la date) sera généré automatiquement.

É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 addComment($postId, $author, $comment) {
    $affectedLines = postComment($postId, $author, $comment);

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

Mise à jour de la vue

Il faut aussi modifier un peu la vue qui affiche un billet et ses commentaires (view/frontend/postView.php). En effet, nous devons ajouter le formulaire pour pouvoir envoyer des commentaires !
view/frontend/postView.php :
<!-- ... -->

<h2>Commentaires</h2>

<form action="index.php?action=addComment&id=<?= $post['id'] ?>" method="post">
    <div>
        <label for="author">Auteur</label><br>
        <input type="text" id="author" name="author">
    </div>
    <div>
        <label for="comment">Commentaire</label><br>
        <textarea id="comment" name="comment"></textarea>
    </div>
    <div>
        <input type="submit">
    </div>
</form>

<!-- ... -->

Mise à jour du routeur

Ajoutons un elseif dans notre routeur (index.php) pour appeler le nouveau contrôleur addComment 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'] == 'addComment') {
        if (isset($_GET['id']) && $_GET['id'] > 0) {
            if (!empty($_POST['author']) && !empty($_POST['comment'])) {
                addComment($_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 >