CRUD avancé

Licence Informatique, semestre 6

Alexandre NiveauJean-Marc Lecarpentier — Judith Jeyafreeda Andrew

Enseignement des technologies du Web

 

CRUD avancé

Notes de cours

Travail personnel

Objectifs

Suite de la mise en place incrémentale de l'architecture MVCR.

Exercice 1 — Amélioration de l’ergonomie dans MVCR #

On continue le site sur les animaux fait aux deux TP précédents, en ajoutant les améliorations présentées en cours.

Avant de commencer cet exercice, il faut avoir avoir fait au moins toute la partie concernant la création d'un nouvel animal dans la partie précédente (c'est-à-dire jusqu'à « Suppression d'un animal » non compris).

Comme d'habitude, ne pas hésiter à s'inspirer de l'exemple des couleurs si vous avez des doutes, n'hésitez pas à jeter un œil à l'exemple des couleurs qui a été expliqué et complété en direct pendant le cours (résultat final, archive du code), mais évitez le copier-coller (mieux vaut réécrire, en essayant de comprendre ce qu'on écrit).

Ajout d'un menu

Si ce n'est déjà fait, ajouter un attribut $menu à la vue, qui contient une liste de couples URL-texte. Cette liste doit être utilisée dans le squelette pour afficher un menu en haut de la page.

Le menu doit contenir des liens vers la page d'accueil, la liste des animaux, et la page de création d'un animal.

POST-redirect-GET

Normalement, lors de la création d'un nouvel animal, le contrôleur appelle le makeAnimalPage de la vue. Comme vu en cours, ce n'est pas une bonne chose : on va plutôt demander au client de faire une nouvelle requête, en GET, vers la page de l'animal nouvellement créé.

  1. Ajouter une méthode POSTredirect($url, $feedback) au routeur, qui envoie une réponse HTTP de type 303 See Other demandant au client de se rediriger vers l'URL passée en argument (le paramètre $feedback est pour l'instant ignoré).
  2. Ajouter une méthode displayAnimalCreationSuccess($id) à la vue, qui utilise la méthode créée ci-dessus pour rediriger le client vers la page de l'animal dont l'identifiant est passé en paramètre (passer une chaîne quelconque comme feedback pour l'instant). Dans le contrôleur, lorsqu'un nouvel animal a été correctement ajouté, appeler cette nouvelle méthode plutôt que makeAnimalPage.
  3. Tester. Vérifier notamment que l'actualisation de la page fonctionne correctement après ajout d'un nouvel animal.

Feedback

On voudrait donner un feedback à l'internaute, pour l'informer sur le résultat de ses actions (succès ou erreur).

  1. Ajouter un attribut $feedback à la vue, passé à son constructeur. Le squelette devra afficher le contenu de cet attribut quelque part en haut de la page.
  2. Modifier le routeur pour qu'il passe la chaîne "Test" comme feedback lorsqu'il construit la vue. Vérifier que ça fonctionne.
  3. À présent, on va utiliser une variable de session $_SESSION['feedback'] pour passer le feedback d'une requête à l'autre. Commencer une session au début du main du routeur, utiliser la variable de session $_SESSION['feedback'] pour construire la vue, puis supprimer le contenu de cette variable (le feedback n'est affiché qu'une seule fois).
  4. Modifier la méthode POSTredirect pour qu'elle mette dans $_SESSION['feedback'] le contenu de son paramètre $feedback, avant la redirection.
  5. Tester (et mettre un message de feedback significatif).

Persistance des données de formulaire

On veut maintenant appliquer le POST-redirect-GET dans le cas où l'ajout d'un nouvel animal a échoué à cause d'erreurs dans le formulaire. Cela nécessite d'enregistrer l'animal en cours de création dans une variable de session.

  1. Lorsque l'internaute demande page de création d'un animal, qui dans votre code s'occupe de créer la nouvelle instance de AnimalBuilder pour la passer à makeAnimalCreationPage ? Ça ne devrait pas être le routeur, qui n'est pas censé manipuler des éléments du modèle. Si ce n'est déjà fait, transférer ceci dans une méthode newAnimal du contrôleur. Vérifier que tout marche toujours.
  2. Modifier la méthode saveNewAnimal du contrôleur : si l'animal créé par l'internaute est invalide, enregistrer l'instance de AnimalBuilder dans la variable de session $_SESSION['currentNewAnimal'].
  3. Modifier la méthode newAnimal pour qu'elle utilise l'instance de AnimalBuilder stockée en session si elle existe, plutôt que d'en créer une nouvelle.
  4. Tester : si on soumet un animal invalide, le formulaire devrait rester pré-rempli même si on change de page et qu'on revient.
  5. Ajouter une méthode displayAnimalCreationFailure() à la vue, qui redirige le client vers la page de création d'un animal (avec un message de feedback pertinent). Modifier le contrôleur pour qu'il appelle cette méthode au lieu d'afficher le formulaire lorsque l'animal soumis est invalide.
  6. Tester : il devrait être possible d'actualiser après soumission d'un animal invalide. Il ne reste plus qu'à supprimer la variable de session lors d'une soumission réussie.

Compléments (optionnel)

Les principes présentés dans cet exercice devront être appliqués au reste de l'architecture (modification et suppression). Il pourrait aussi être une bonne idée de regarder les compléments dans les exercices des TP précédents.