Telaria CMS
Telaria CMS est un module éditorial complémentaire, destiné à publier des pages de contexte (mentions légales, accessibilité, à propos, articles) sans concurrencer l'éditeur de documentation. Il s'intègre au back office existant, utilise le rendu Markdown Codexia et respecte les contraintes d'accès et d'accessibilité. Sources : Architecture, Markdown Codexia, Accessibilité UI.
Positionnement
- Fonctionnalité secondaire, au service du site et du contexte documentaire.
- Aucune remise en cause de la vocation principale : éditeur de documentation. Source : Architecture.
Objectifs
- Ajouter des pages éditoriales rapides à publier.
- Garder un flux Symfony natif, sans bundle externe.
- Centraliser l'administration dans le back office.
- Appliquer les règles d'accessibilité et de qualité Codexia. Sources : Qualité, Accessibilité UI.
Périmètre fonctionnel
- Contenus au format Markdown, avec prévisualisation.
- Tags pour classement simple.
- Publication contrôlée (draft, published, archived).
- Rendu via les contrĂ´leurs existants.
- Images intégrées, stockées hors
public/.
Modèle de données (BDD)
Entités principales :
CmsContent:title,slug,excerpt,markdown,status,publishedAt,updatedAt,visibility,type,author.CmsTag:name,slug.CmsImage:filename,mime,size,width,height,checksum,owner,createdAt. Relations :CmsContent↔CmsTag(ManyToMany).CmsContent→CmsImage(OneToMany) si besoin de lier des images au contenu.
Stockage des images (dossier privé)
Chemin cible :
/<racine-projet>/media/cms(au mĂŞme niveau que/public).
Contraintes :
- Dossier hors webroot, non exposé par Apache.
- Accès uniquement via un contrôleur Symfony qui vérifie les droits. Source : HttpFoundation BinaryFileResponse.
Configuration recommandée :
CMS_MEDIA_DIR=%kernel.project_dir%/media/cms
Rendu Markdown
Le rendu suit le pipeline Codexia :
- Pré-traitement des directives internes.
- Parsing CommonMark + GFM.
- Post-traitement accessibilité.
- Sanitization finale. Source : Markdown Codexia, CommonMark Spec.
Prévisualisation Markdown
Endpoint back office :
POST /admin/cms/preview
Retour :
- HTML sanitizé, prêt à afficher dans le back office.
Rendu public
Route dédiée :
/page/{slug}.html
Rendu :
- Le contrĂ´leur appelle un utilitaire
CmsRendererpour transformer le Markdown en HTML. - Le
slugreste stable pour les pages légales.
Intégration aux contrôleurs existants
Utilitaires :
CmsResolver: récupération du contenu parslug+ vérification des droits.CmsRenderer: rendu Markdown → HTML.
Usage :
- Les contrĂ´leurs existants appellent
CmsRenderersans connaître la persistance.
Administration back office
Onglet CMS :
CmsContentController: CRUD + publication.CmsImageController: upload + gestion.CmsTagController: administration des tags.
Formulaires :
- Labels visibles, erreurs liées aux champs, navigation clavier. Source : Accessibilité UI.
Sécurité et rôles
Rôles ajoutés :
ROLE_CMS_ADMINROLE_CMS_EDITORROLE_CMS_REVIEWER
Contrôle d'accès :
- Voter dédié
CmsContentVoterpourVIEW,EDIT,PUBLISH,DELETE. - Accès aux pages CMS soumis au système d'authentification existant. Source : Symfony Voters.
Images intégrées
Insertion dans le Markdown :
- Syntaxe Markdown standard avec URL contrôlée (
/cms/media/{id}). - Le contrôleur média vérifie les droits avant diffusion. Source : FileType Symfony.
Arborescence cible (exemple)
projet/
├── media/
│ └── cms/
├── public/
├── src/
│ ├── Controller/
│ │ ├── Admin/
│ │ │ ├── CmsContentController.php
│ │ │ ├── CmsImageController.php
│ │ │ └── CmsTagController.php
│ │ └── CmsPublicController.php
│ ├── Entity/
│ │ ├── CmsContent.php
│ │ ├── CmsImage.php
│ │ └── CmsTag.php
│ ├── Repository/
│ │ ├── CmsContentRepository.php
│ │ ├── CmsImageRepository.php
│ │ └── CmsTagRepository.php
│ └── Service/
│ ├── CmsRenderer.php
│ └── CmsResolver.php
└── templates/
└── cms/
Liens internes
Implémentation
| Aspect | Localisation |
|---|---|
| Bundle principal | tlr-symfony — entités cms_content, cms_tag, cms_image, cms_content_tag |
| Entités | CmsContent, CmsTag, CmsImage dans tlr-symfony ; CmsContentSeo dans telaria-app (companion entity) |
| Controllers | src/Controller/Admin/CmsContentController.php, CmsImageController.php, CmsTagController.php, CmsPublicController.php dans telaria-app |
| Services | CmsRenderer.php, CmsResolver.php dans telaria-app |
| Stockage médias | <racine>/media/cms/ (hors webroot) — accès via contrôleur Symfony |
| Route publique | /page/{slug}.html |
| Config | CMS_MEDIA_DIR=%kernel.project_dir%/media/cms |
Historique des décisions
| Version | Date | Décision |
|---|---|---|
| 1.0 | 2026-06-14 | Version initiale — première formalisation du versioning des specs. |
| — | 2026-04-06 | Architecture multi-site tlr-symfony retenue : entités CMS dans le bundle (cms_content, cms_tag, cms_image), companion entity CmsContentSeo dans l'app pour le SEO. |