Mini-projet PHP
L’objectif de cet atelier est de compléter le code source d’un site web :
-
codé en PHP objet
-
….et possédant une architecture MVC
Qu’est que l’architecture MVC ?[1]
L’utilisation de classes PHP permet délà d’aboutir à un code modulaire. L’utilisation d’une architecture MVC va, de surcroît, clairement séparer les différents composants d’une application web classique :
-
Les Modèles (→ le ‘M’ de MVC)
Les modèles sont les éléments qui se chargent des échanges avec la base de données. On ne met pas de traitement dans ces fichiers, uniquement des requêtes (SQL).
-
Les Vues (→ le ‘V’ de MVC)
Les vues contiennent uniquement le code HTML destiné à structurer les pages.
-
Les Contrôleurs (→ le ‘C’ de MVC)
Les contrôleurs, pour leur part, contiennent toute l’intelligence de l’application, le traitement des données en vue de leur affichage, par exemple.
En plus, des ces élements, on va souvent en trouver un autre qu’on nomme parfois “Routeur” ou “Front Controller” qui est le point d’entrée de l’application, quelle que soit la page affichée. Il est systématiquement appelé, et envoie la demande au bon contrôleur. Il est chargé de trouver le bon chemin pour que l’utilisateur récupère la bonne page, d’où le nom de routeur.
On parvient alors au schéma récapitulatif suivant :
Mise en situation
On désire compléter le code d’une application — nommée "`Shareboard`" — permettant de partager au sein d’une communauté des liens vers des sites web (→ shares) que l’on juge intéressants.
Le code existant permet déjà :
-
d’ajouter, lister, mettre à jour, supprimer des entrées
-
d’enregistrer des utilisateurs
-
d’authentifier les utilisateurs enregistrés
Il utilise une architecture MVC à travers toute une série de classes PHP et s’appuie sur le framework CSS Bootstrap 4 pour le rendu de ses pages web.
Les fonctionnalités supplémentaires que vous allez devoir coder sont celles consistant à :
-
permettre à l’utilisateur de préciser une catégorie pour le partage qu’il veut créer
-
ajouter — sous forme de graphiques — des métriques sur le nombre de partages publiés sur certaines périodes (ex. : sur 1 semaine, 1 mois, 1 année) de façon à évaluer la popularité du site web.
💻 Travail n° 1 Installation du code de base
-
Se rendre, avec le navigateur web, sur le dépôt Github du projet oop-php-mvc
-
Télécharger l’archive du code que vous allez devoir étudier et compléter et la décompresser dans le répertoire racine de votre site web personnel (→
C:\Users\
<compte>\Documents\public_html
) -
Depuis le panneau de contrôle XAMPP, lancer Apache et MySQL
-
Depuis PHPMyAdmin (→ http://localhost/phpmyadmin/) , créer une base de données
dbShareboard
à laquelle vous assignerez un nouvel utilisateurdb-admin
(mot de passe :yesUcan
) ayant tous les droits “Données” et “Structure” sur celle-ci. -
Suivre les instructions du fichier
README.md
de l’archive téléchargée pour configurer l’application via le fichierconfig.php
et créer les tables nécessaires dans la base de données (→ tables “shares” et “users”) -
Accéder au site (→ http://localhost/~<compte>) pour vérifier son bon fonctionnement.
Vous exécuterez notamment les actions suivantes :
-
création d’un compte sur le site
-
connexion/déconnexion du site
-
ajout d’un ou plusieurs “partages”
-
💻 Travail n° 2 Étude du code
L’analyse du code permet de déterminer le diagramme de classes UML de l’application :
On peut également tirer du code les diagrammes de séquence UML pour :
-
l’affichage de la page d’accueil :
-
l’affichage de la page des partages puis l’ajout d’un nouveau partage :
🎯 Travail à faire :
-
Quel est le rôle du fichier
.htaccess
situé à la racine du site ?Donner les URLs “réelles” fournies à l’application web suite au traitement des requêtes émises par le navigateur pour chaque action du site par le fichier
.htaccess
: schéma, domaine, chemin, chaine de requête/paramètres (→ query string/parameters). -
Quel type de requête HTTP est utilisée pour transmettre à l’application les données d’authentification d’un utilisateur lors de sa connexion ?
L’implémentation actuelle de la connexion d’un utilisateur vous semble-t-elle satisfaisante en terme de sécurité ?
-
À partir des diagrammes de séquence donnés plus haut, reproduire dans MagicDraw le diagramme de séquence correspondant au “Login”
Les diagrammes de séquences donnés plus haut ont été réalisés en ligne avec PlantUML
.
Ce n’est pas un logiciel de modélisation comme l’outil “institutionnel” MagicDraw mais plutôt un logiciel de dessin.
En utilisant une description textuelle des diagrammes UML (mais malheureusement pas SysML), il est, à mon goût, plus simple à utiliser que MagicDraw, surtout pour les diagrammes de séquence.
Du fait de cette même description textuelle, le format PlantUML est, de plus, tout à fait adapté aux outils de gestion de version.
Cependant, contrairement à MagicDraw, il ne permet pas le lien entre les différents diagrammes. Il faut parfois savoir rendre à César ce qui est à César ! 😉
Pour vous faire une idée de la syntaxe PlantUML, on vous fournit :
💻 Travail n° 3 Modification du formulaire d’ajout de partage
On désire modifier le formulaire de saisie des informations pour un nouveau partage.
🎯 Travail à faire :
Modifier le code du site pour permettre à l’utilisateur d’attribuer une catégorie au partage qu’il est en train de créer à l’aide de boutons radio comme dans cet exemple issu de la documentation de Bootstrap 4 .
Vous pourrez par exemple proposer les domaines correspondants aux pôles d’activités définis dans le référentiel du BTS CIEL :
-
Étude et Conception de réseaux
-
Exploitation et Maintenance des réseaux
-
Valorisation de la donnée / Cybersécurité
-
Autre
La liste des partages devra alors faire apparaître le domaine de chacun (sous forme de “badge” Bootstrap par exemple).
Veiller à modifier aussi le code qui permet de modifier un partage de façon à pouvoir changer son domaine.
|
💻 Travail n° 4 Métriques de popularité
On désire enfin ajouter une nouvelle page au site permettant de suivre l’évolution de la popularité du site à l’aide de graphes, un peu à la manière de ce qu’on peut voir sur un site comme Sourceforge
Vous devrez proposer à l’utilisateur des graphes montrant le nombre de partages publiés par jour, semaine et mois.
🎯 Travail à faire :
-
Se renseigner sur l’utilisation de la librairie Charts.js
-
Ajouter un nouvel item “Insights” dans la barre de navigation
-
Créer un nouveau Contrôleur, un nouveau Modèle et une nouvelle Vue pour afficher le nombre de partages créés sur 7 jours
-
Améliorer le site pour permettre à l’utilisateur — comme dans la démo donnée ci-dessus — de sélectionner la période sur laquelle il désire visualiser les métriques (hebdomadaire, mensuelle, annuelle)
|
🞄 🞄 🞄