Contexte
L’agence immobilière Immo’Bill, basée à Pau, ambitionne de créer un site vitrine pour présenter les biens immobiliers disponibles à la vente dans son catalogue. Le site doit offrir une section permettant aux visiteurs de consulter les biens disponibles, avec la possibilité d’accéder aux détails de chaque bien. En parallèle, une interface d’administration est nécessaire pour saisir les informations relatives aux biens, gérer les membres, les propriétaires des biens, ainsi que les différentes catégories de biens.
Pour répondre à ces besoins, il était impératif de mettre en place un formulaire de connexion permettant de se connecter en tant qu’administrateur, mais également en tant que simple membre. Cette fonctionnalité garantit un accès sécurisé et une gestion efficace du contenu du site.
Les schémas
Modèle Conceptuel des Données (MCD)

Diagramme de classe

Mes missions
Les biens côté admin
Ma première mission était d’effectuer un CRUD (Create Read Update Delete) sur les biens ce qui signifie que je devais les afficher dans la partie administrateur, pour que seul l’administrateur et les membres puissent les ajouter, les modifier ou les supprimer.

Tout d’abord, pour les consulter, il faut être connecté en administrateur ou en membre. Une fois connecté, une liste déroulante nommée “Gestion” apparaît contenant “Biens” comme ci-dessus.
Quand on clique dessus les biens apparaissent sous forme de tableau avec 3 différents boutons qui sont “ajouter”, “modifier” et “supprimer” comme ci-dessous.

On utilise la fonction findAll de BienRepository pour récupérer tous les biens présents dans la base de données afin de les renvoyer dans la vue.

Voici le code au niveau de la vue :

L’ajout et la modification d’un bien utilisent la même fonction et le même formulaire. On va donc voir le code du contrôleur “AdminBien” et du “BienType” qui correspond au formulaire.
Cette fonction permet de créer un bien de la classe Bien si l’action correspond à un ajout sinon on récupère le bien qui correspond à l’id transmis dans la route.

La classe Bien contient un id qui est la clé primaire dans la base de données. Elle possède également un titre, une description, une surface, un prix, un nombre de pièces, d’étage, de chambre, une adresse complète, une image que l’on peut téléverser, on verra comment après et une date d’ajout. Il y a aussi 2 relations avec 2 autres classes qui sont “Propriétaire” et “Type” qui représente le type du bien comme appartement par exemple.




Ensuite, si le formulaire n’a pas été soumis, c’est à dire que l’utilisateur a cliqué pour l’afficher alors la fonction retourne la vue qui permet d’afficher le formulaire. Sinon, s’il a été soumis et qu’il est valide, alors on envoie les données dans la base de données pour qu’elles soient ajoutées ou modifiées.
Concernant le type et le propriétaire, leur affichage est sous forme de liste déroulante où l’utilisateur peut choisir parmi une liste limitée pour éviter les erreurs par exemple comme ci-dessous :

Pour utiliser l’”UploadableField”, il fallait modifier le mapping présent dans le fichier vich-uploader comme ci dessous.

La suppression des biens utilise une autre route et une autre fonction. Cette fonction permet de retrouver un bien par rapport à son id. Ensuite elle vérifie que le token renvoyé par le formulaire soit valide et si c’est bien le cas alors la fonction va le supprimer de la base de données. Ensuite, on renvoie la liste des biens avec un addFlash qui est un message qui permet de dire si la suppression s’est bien passée ou non.

Quand on clique sur le bouton supprimer, un popup apparaît demandant la confirmation de la suppression du bien sélectionné. Si on confirme cette suppression et que celle-ci se déroule bien alors un message apparaît en vert pour informer l’utilisateur que la suppression s’est bien déroulée.


Fonctionnalité d'envoi de message
Ma deuxième mission était de pouvoir envoyer un message depuis le site en entrant un nom, un prénom, un mail, un sujet et un message.
Pour réaliser cette tâche, j’ai dû créer une classe, un contrôleur, un formulaire et une template pour afficher cette vue.
La classe “Contact” comprend 7 propriétés comme l’id, le nom, prénom, l’email, le sujet, le message et une date de création.
Voici la classe de contact :

Voici le builder du formulaire de contact :
Les Assert, dans les contraintes, permettent de définir des obligations pour un champ. On peut choisir une taille, un type de données comme adresse mail par exemple. On peut également dire si le champ peut être vide ou non.

Le contrôleur de contact permet de créer un objet de la classe Contact. Ensuite si l’utilisateur est connecté alors on remplit automatiquement l’email, le nom et le prénom pour que celui-ci n’ait pas à les remplir. Ensuite si le formulaire n’est pas soumis alors on l’envoie dans la vue permettant de le remplir. Sinon, on récupère les données du formulaire, on les ajoute dans la base de données et on crée un mail avec ces données qu’on envoie. On ajoute également un addFlash pour confirmer l’envoie.

Voici le formulaire de contact :

Quand on clique sur enregistrer alors l’addFlash apparaît :


Ensuite, on peut retrouver ce message dans la boîte mail nommé mailTrap comme ci-contre :
Filtre sur les biens
Enfin, ma dernière mission était de mettre en place un filtre pour l’affichage des biens. J’ai donc créé un filtre avec une surface minimum, un prix maximum et une ville où se situe le bien.

Pour ceci, il fallait créer une classe et un formulaire. Il fallait aussi modifier le fichier BienRepository pour pouvoir faire un select avec différents paramètres.
Voici la classe BienSearch qui contient 3 propriétés :

Concernant le constructeur du formulaire, on met que chaque input n’est pas requis pour que l’utilisateur puisse faire une recherche sur un ou plusieurs attributs.

On ajoute, dans le fichier BienSearchType, correspondant au formulaire la fonction getBlockPrefix() pour que le lien soit plus propre.

J’ai créé une fonction “searchBien” dans le fichier “BienSearchRepository” qui prend en paramètre un objet de la classe BienSearch qui vérifie que les propriétés de la classe ne soit pas null et si elles ne le sont pas alors on ajoute cette condition pour le select.


J’ai modifié la fonction “biens” présente dans le contrôle du Bien afin de vérifier que l’une des propriétés de l’objet de la classe soit non null. Ensuite si le formulaire est soumis et valide alors on fait une recherche des biens par rapport à ce que l’utilisateur a rentré dans le formulaire. Ensuite, on renvoie les biens qui correspondent aux critères.
Voici un exemple de recherche :

Langages utilisés





Outils utilisés


