ADR-0004 — Doctrine attributes uniquement (pas d'annotations docblock)
| Statut | Accepté |
|---|---|
| Date | 2025-04-20 |
| Auteurs | Julien Jorry |
| Supersedes | Ancien standard « annotations docblock Doctrine » |
Contexte
Lors de la migration SF4→SF7, config/packages/doctrine.yaml a été basculé en type: attribute. Conséquence : les annotations docblock (/** @ORM\Column */) ne sont plus lues du tout. Symptômes silencieux observés : slugs NULL sur Adherent, postPersist ignoré sur AccountableObject, comptes non créés à l'inscription, getBalance() qui lève NPE.
Décision
PHP 8 attributes uniquement pour Doctrine ORM, Gedmo, et toute lib de mapping. Pas d'annotations docblock. Inclut #[ORM\Column], #[ORM\HasLifecycleCallbacks], #[ORM\PostPersist], #[ORM\MappedSuperclass], #[Gedmo\Slug], #[Gedmo\Timestampable].
Conséquences positives
- Cohérence avec PHP 8.4 : les attributs sont une feature native.
- IDE PHPStorm/VSCode/PHPStan : refactor sûr, autocomplétion.
- Pas de double maintenance docblock + attributes.
- Aucune ambiguïté de lecture par Doctrine.
Conséquences négatives
- Lecture moins lisible pour les anciens développeurs habitués aux docblocks.
- Migration manuelle nécessaire sur quelques classes legacy.
Alternatives examinées
- Garder les docblocks — rejeté : silencieusement ignorés.
- Mapping XML — rejeté : désynchronisation entité/mapping garantie sur dev solo.
- Mapping YAML — rejeté pour les mêmes raisons + déprécié Doctrine 3.
Références
CLAUDE.md— règle absolue.claude/rules/global.mddocs/migration/RAPPORT_MIGRATION_SF74.md