Bonjour les amis, je suis débutant et j'ai des problème a implémenter quelque méthodes dans mon site MVC en PHP.
le site permet d'afficher des poèmes.
le modèle contient:
-une classe poème: qui contient les attributs de chaque poème
- une interface Poemestorage: permet de lire des poèmes
-classe StaticPoemStorage: conteint une implementation des methodes de l'interface
je ne travail pas avec une BD, j'ai seulement un tableau associatif qui est présent dans la class StaticPoemStorage.
Mon problème c'est comment:
Ajouter une méthode makeFormà la classePoem, qui génère un formulaire HTML permettant de proposer un poème.
Ajouter une méthodecreate($poem)à la classe StaticPoemStorage
, qui permet d'ajouter un poème à notre « base de données ».
Faire en sorte que le formulaire s'affiche à l'URLindex.php?action=nouveau.
Faire en sorte que la soumission du formulaire ajoute le poème à notre pseudo-BD. En particulier, le nouveau poème doit s'ajouter au menu, et il doit s'afficher lorsque l'utilisateur affiche la page correspondante. Dans un premier temps, on pourra mettre une instance de StaticPoemStorage
en session.
La solution de la session n'est pas idéale, car seul l'utilisateur voit les poèmes qu'il a ajoutés (tester avec plusieurs navigateurs). Pour que les nouveaux poèmes soient partagés, ajouter un destructeur à StaticPoemStorage
qui enregistre les données dans un fichier texte sur le serveur, puis modifier le constructeur pour qu'il lise le fichier plutôt que de construire un tableau neuf à chaque fois.
code:
Poem:
PoemStorage
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 <?php /* Représente un poème. */ class Poem { protected $title; protected $image; protected $author; protected $text; public function __construct($title, $image, $author, $text) { $this->title = $title; $this->image = $image; $this->author = $author; $this->text = $text; } /* Renvoie le titre du poème */ public function getTitle() { return $this->title; } /* Renvoie le nom du fichier contenant le portrait de l'auteur */ public function getImage() { return $this->image; } /* Renvoie le nom de l'auteur */ public function getAuthor() { return $this->author; } /* Renvoie le nom du fichier (sans extension) contenant le texte du poème */ public function getText() { return $this->text; } } ?>
StaticPoemStorage
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 <?php /* Interface représentant un système de stockage des poèmes. */ interface PoemStorage { /* Renvoie l'instance de Poem correspondant à l'identifiant donné, * ou null s'il n'y en a pas. */ public function read($id); /* Renvoie un tableau associatif id=>poème avec tous les poèmes de la base. */ public function readAll(); } ?>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 <?php require_once("model/Poem.php"); require_once("model/PoemStorage.php"); /* Une classe de démo de l'architecture. Une vraie BD ne contiendrait ** évidemment pas directement des instances de Poem, il faudrait ** les construire lors de la lecture en BD. */ class StaticPoemStorage implements PoemStorage { protected $db; /* Construit une instance avec 4 poèmes. */ public function __construct() { $this->db = array( "01" => new Poem("Ma bohème", "rimbaud.jpg", "Arthur Rimbaud", "boheme"), "02" => new Poem("J'ai tant rêvé de toi", "desnos.jpg", "Robert Desnos", "reve"), "03" => new Poem("Chanson d'automne", "verlaine.jpg", "Paul Verlaine", "sanglots"), "04" => new Poem("Liberté", "eluard.jpg", "Paul Éluard", "liberte"), ); } public function read($id) { if (array_key_exists($id, $this->db)) { return $this->db[$id]; } return null; } public function readAll() { return $this->db; } }
Partager