Aller au contenu
Léo.
Tous les projets
Développement webTerminé2025

StageLink

Plateforme de gestion des offres de stage, en PHP MVC écrit à la main.

CESI · Développement web · Projet d'équipe

Page d'accueil de StageLink
Page d'accueil de StageLink
Rôle
Contrôleurs, modèles et intégration
Équipe
4 développeurs
Profils gérés
Étudiant, pilote de promotion, administrateur
Sans framework
Routeur, MVC et accès aux données écrits à la main

Points clés

  • Routeur et couche MVC écrits à la main, sans framework
  • Trois profils d'utilisateur aux droits distincts
  • Wish-list, candidature avec CV et lettre, suivi des réponses
  • Requêtes préparées partout, échappement des vues par Twig

La démonstration

Démonstration : recherche d'une offre, ajout à la wish-list, candidature et suivi côté étudiant.

Comment ça marche

  1. 1

    L'URL est décodée

    Toutes les requêtes entrent par un fichier unique. Il reconstruit la route depuis l'URL, la forme lisible `/StageLinkV1/offres` comme la forme historique avec un paramètre, puis vérifie qu'une session existe. Sans session et hors des quelques routes publiques, la requête repart vers la page de connexion avant qu'aucun code métier ne s'exécute.

  2. 2

    Le contrôleur prend la main

    Chaque route désigne un contrôleur : offres, entreprises, wish-list, tableau de bord, utilisateurs. Il lit les paramètres, décide quoi demander au modèle, et ne contient ni SQL ni HTML. C'est cette discipline qui rend le motif MVC lisible quand on l'écrit soi-même plutôt que de l'hériter.

  3. 3

    Le modèle interroge la base

    Les modèles portent l'accès aux données et la logique métier. Toutes les requêtes passent par des requêtes préparées, plus de quatre-vingts dans le projet, ce qui écarte les injections SQL par construction plutôt que par vigilance.

  4. 4

    Twig rend la page

    Les gabarits reçoivent des données déjà prêtes et ne font que les mettre en forme. L'échappement des sorties est celui de Twig, actif par défaut : la protection contre les injections de script vient du moteur, pas d'un appel oublié quelque part.

Ce que fait la plateforme

StageLink réunit au même endroit ce qui est habituellement éparpillé : les offres de stage, les fiches des entreprises partenaires et le suivi des candidatures. Un étudiant cherche une offre par mots-clés, compétences ou durée, la met en wish-list, candidate avec son CV et sa lettre, puis suit l'état de ses réponses. Un pilote de promotion gère les offres, les entreprises et les comptes de sa promotion, et suit l'avancement de la recherche de stage. Un administrateur gère les pilotes eux-mêmes. Les entreprises peuvent être évaluées, et les offres agrégées en statistiques par compétence ou par durée.

Le contexte

Les étudiants du CESI cherchent leurs stages en activant leurs réseaux personnels, sans point d'entrée commun. Le sujet demandait une application web complète construite sans framework : ni Symfony, ni Laravel, seulement PHP, un moteur de gabarits et une base MySQL. La contrainte est l'intérêt du projet, elle oblige à écrire soi-même le routage, la séparation des responsabilités et l'accès aux données.

Sécurité : ce qui est en place, et ce qui manque

En relisant le code pour cette page, j'ai préféré séparer les deux. Une liste de bonnes pratiques est facile à écrire ; c'est ce qui s'y trouve réellement qui compte.

  • En place, mots de passe hachés par `password_hash`, qui applique bcrypt
  • En place, requêtes préparées sur l'ensemble des accès à la base
  • En place, échappement automatique des variables par Twig, avec deux exceptions explicites sur la pagination
  • Manquant, aucun jeton anti-CSRF sur les formulaires
  • Manquant, pas de régénération d'identifiant de session après connexion, donc pas de protection contre la fixation de session

Ce que j'en retire

  • Le motif MVC compris de l'intérieur, sans magie de framework
  • Conception d'un schéma relationnel et d'un modèle de droits par profil
  • Ce qu'un framework apporte vraiment, relire ce code deux ans après le montre mieux que n'importe quel cours
  • Gestion de version et travail d'équipe sur une base de code partagée

Galerie

  • Liste des offres de stage
  • Détail d'une offre
  • Tableau de bord
  • Fiche entreprise
  • Formulaire de candidature
  • Affichage responsive

1/6 · Liste des offres de stage

Tous les projets