Bonjour,
Désolé mais je vois pas mal d'erreurs.
D'une part il faut comprendre les différentes actions possibles.
1] Affichage du formulaire d'édition de l'article
2] Soumission du formulaire d'édition de l'article
Dans le 1], il suffit d'utiliser la méthode getPost($postId), dans le 2], on va utiliser la méthode editArticle($title, $content, $id)Je pense qu'il y a déjà un gros problème de compréhension à ce niveau-là.
Théoriquement, l'affichage d'un formulaire et son édition peuvent se faire via la même URL.
Or d'après ton code, si j'accède via l'URL à ?action=editArticle c'est que je soumet un formulaire (c'est écrit dans ton routeur même si ça ne devrait pas être écrit là). C'est peut-être vrai mais pas forcément.
Perso, je n'ai jamais aimé ce système car c'est la multiplication des URLs.
Mes URLs ressemblent souvent à ?action=edit&id=X et ce, peu importe que ça soit à l'affichage ou à la soumission du formulaire.
Pour vérifier qu'un formulaire est soumis, le plus simple est de créer un input type hidden et de vérifier s'il est défini :
<input type="hidden" name="action" value="submit" />
Ensuite on vérifie en PHP si le formulaire est soumis (tout ça est dans le contrôleur !) :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| $postManager = new PostManager();
if(!empty($_GET['action'])) {
switch($_GET['action']) {
case 'editArticle':
// Par défaut, on charge $post pour pouvoir afficher les valeurs dans notre formulaire
$post = $postManager->getPost($_GET['id']);
// Si le formulaire a été soumis, on va mettre à jour l'article
// En réalité, il faudrait faire des vérifications pour s'assurer par exemple que le titre n'est pas vide
if(!empty($_POST['action']) && $_POST['action'] === 'submit') {
$postManager->editArticle($_POST['title'], $_POST['content'], $_GET['id']);
}
// Ici, et grâce au fait qu'on charge $post par défaut, on pourrait imaginer qu'on repopulate $post avec les valeurs de $_POST
// Ca permettrait par exemple de retourner un titre vide s'il l'était bel et bien à la soumission du formulaire
break;
}
} |
Parmi les erreurs que je vois :
Côté controlleur :
$post = $postManager->getPost($_GET['id']); Pourquoi fais-tu un getPost() ? On s'en fou de $post, surtout que tu peux le voir toi-même, tu ne fais rien du tout de ta variable.
Coté routeur :
Bon déjà, je trouve qu'il y a une énorme erreur à cet endroit.
Un routeur ça route, et un contrôleur ça contrôle.
Alors pourquoi y a-t-il tant de code dans ton routeur ? Il n'est sensé qu'indiquer la route du contrôleur et de la méthode de ce dernier à exécuter.
Tout devrait être dans ton contrôleur !
De plus, on a jamais parlé d'une FONCTION editArticle() mais bien d'une METHODE (méthode = fonction propre à une classe) à chaque fois. Alors d'où sort-elle ici : editArticle($_POST['title'], $_POST['content'], $id);Ca c'est l'erreur fatale "Undefined function editArticle" à l'horizon !
Partager