Architecture technique
Stack, organisation du code, modèle de données, services métier.
Stack technique
| Couche | Technologie |
|---|---|
| Langage | PHP 8.1 ou supérieur |
| Framework | Symfony 6.4 LTS |
| ORM | Doctrine ORM 3 + Doctrine Migrations |
| Base de données | MySQL / MariaDB |
| Vues | Twig, Bootstrap 5.3, Font Awesome 6 |
| Assets | Symfony AssetMapper (pas de build Node requis), Stimulus, Turbo |
| Dompdf — bulletins, reçus, états | |
| Excel | PhpSpreadsheet — imports et exports |
| Pagination | KnpPaginatorBundle — 50 lignes par page sur toutes les listes |
| Fichiers | VichUploaderBundle, elFinder (gestionnaire de fichiers), CKEditor |
| Divers | QR codes (endroid), PHPMailer, Guzzle |
Organisation du code
src/
├── Controller/ Contrôleurs HTTP (un par module)
│ ├── Api/ API mobile REST (ed_photo)
│ ├── Portal/ Portails parent et élève
│ └── Concern/ Traits partagés entre contrôleurs
├── Entity/ Entités Doctrine (modèle de données)
├── Repository/ Requêtes métier
├── Form/ Types de formulaires
├── Service/ Logique métier réutilisable
├── Security/ Authentificateurs et voteurs
└── Twig/ Extensions Twig
templates/ Vues, une arborescence par module
├── base.html.twig Layout principal (sidebar, topbar, footer)
├── components/ Composants réutilisables (page_header, macros…)
└── documentation/ Cette documentation
config/ Configuration (packages, routes, services)
migrations/ Migrations Doctrine
public/ Racine web
docs/ Notes techniques détaillées par module
Modèle de données — les entités centrales
| Entité | Rôle |
|---|---|
School, SchoolGroup | Établissement et regroupement d'établissements. |
SchoolYear | Année scolaire ; borne la quasi-totalité des données. |
Student | Référentiel d'identité de l'élève. Ne porte aucune donnée de scolarité. |
Registration | Inscription : élève × année. Porte classe, niveau, statut, bourse, frais. |
PreRegistration | Demande d'admission, avec ses PreRegistrationDocument. |
Cycle, Level, Faculty, Round, Classroom | Structure pédagogique. |
Subject, SubjectType, Course, TimeSlot, Room | Matières et emplois du temps. |
Period, Evaluation, Grade | Périodes, évaluations et notes. |
Bulletin, BulletinLine | Bulletins scolaires. |
Absence, AbsenceType | Absences et assiduité. |
Fee, StudentFee, FeeSchedule | Frais du niveau, frais dus par l'élève, échéanciers. |
Payment, CashRegister, CashDeposit, Depense | Encaissements, caisses, versements bancaires, dépenses. |
AccountingAccount, AccountingEntry, AccountingPeriodClosure, BankReconciliation | Comptabilité. |
Employee, Contract, SalaryComponent, PayrollPeriod, Payslip | RH et paie. |
User | Compte de connexion et rôles. |
Notification, ActivityLog | Notifications internes et journal d'activité. |
Les entités rattachées à un établissement implémentent SchoolOwnedInterface (ou
MultiSchoolOwnedInterface quand elles en concernent plusieurs) : c'est ce marqueur qui pilote
le filtrage par contexte.
Services métier
La logique non triviale est extraite des contrôleurs dans src/Service/ :
| Service | Responsabilité |
|---|---|
SchoolContextService | Établissement et année courants ; socle du filtrage. |
EnrollmentService, RegistrationManager | Transformation d'une préinscription validée en inscription, sans duplication d'élève. |
FeeAssignmentService | Rattachement automatique des frais du niveau à l'élève inscrit. |
GradeCalculationService | Moyennes pondérées, rangs, données des bulletins. |
AttendanceService | Taux d'assiduité et détection des élèves à risque. |
AccountingService | Génération automatique des écritures comptables. |
PayrollService | Calcul des bulletins de salaire (CNPS, ITS, rubriques). |
RecouvrementService, ArriereManager, ArriereImporter | Soldes, relances, arriérés et leur import. |
PaymentReceiptService | Génération des reçus PDF. |
MatriculeGenerator, CodeGenerator | Matricules élèves et codes de référence. |
NotificationService, ActivityLogger | Notifications internes et traçabilité des actions. |
ParentPortalService, ParentContextService | Données et contexte de l'espace parent. |
StudentAccountManager, UserEmployeeService | Comptes élèves ; liaison compte utilisateur ↔ employé. |
Sécurité
- Pare-feu
main— deux authentificateurs :MainAuthenticator(personnel et parents, par identifiant ou e-mail) etStudentAuthenticator(élèves, par matricule). - Pare-feu
api— sans état,ApiTokenAuthenticatorsur jeton porteur. - Limitation — 3 tentatives de connexion par 2 minutes.
- Rôles hiérarchisés — voir la rubrique Rôles et permissions.
- CSRF — jeton exigé sur les formulaires et les actions sensibles.
Conventions de développement
- Les listes paginent à 50 éléments via KnpPaginator, avec le partial
_pagination.html.twig. - Les en-têtes de page utilisent le composant
components/page_header.html.twig. - Les suppressions passent par le trait
HandlesEntityDeletion, qui intercepte les contraintes de clé étrangère et affiche un message clair. - Les confirmations de suppression s'appuient sur SweetAlert2 via l'attribut
data-confirm. - Charte graphique : navy
#1e3a5fet émeraude#10b981, thèmes clair et sombre.