Commentaires
Les CMS autour de Symfony2
J'ai besoin d'utiliser un CMS dans mon application, mais lequel choisir ?
Travaillant avec Symfony2, lequel pourra le mieux s'intégrer avec ce
framework ?
Pendant longtemps, je me suis posé ces questions sur différents projets sur
lesquels j'ai travaillé. Au delà de l'aspect fonctionnel, je me suis souvent
confronté à la problématique d'intégration de ces CMS avec mon framework
préféré : Symfony2.
Symfony2 est devenu ces dernières années un framework incontournable dans le
monde du développement web. Se distinguant sur le marché par son fort
écosystème, de nombreuses entreprises ont migré leurs plateformes web sur ce
framework (ou en utilisent seulement certains composants) : Overblog,
Dailymotion, Gdf Suez, M6, Afnic, L'express etc.
Face à cet engouement, les éditeurs de CMS ne sont pas restés indifférents à
ces choix technologiques et ont décidé eux aussi de suivre le mouvement.
Je vous propose donc dans cet article de décortiquer 2 CMS, qui sont
bien connus dans le monde PHP, et qui ont décidé d'opérer récemment ce
rapprochement avec Symfony2 : Drupal
et eZ Publish.
1. Présentation fonctionnelle
Drupal 8
Crée en 1999 par Dries Buytaert, Drupal
est aujourd'hui un CMS très répandu dans le monde du web... C'est en mars
2012 que la communauté Drupal a décidé d'utiliser Symfony dans la nouvelle
version de son CMS. Encore en cours de développement, la distribution de
Drupal dont je vais vous parler dans cet article est encore en version
Alpha.
eZ Plublish 5
Crée en 1999 par 2 frères,
Aleksander Farstad et Bård Farstad,
la société norvégienne eZ Systems est aujourd’hui présente mondialement.
Début 2013, les équipes de eZ Systems ont décidé de migrer leur CMS sous
Symfony2. A ce jour, la version 5.x de eZ Publish est stable et disponible.
1.1 Installation / Configuration
|
eZ Publish |
Drupal |
Installation |
Wizard installation : Langue, BDD, Mails, Paquetage... |
Wizard installation : Langue, BDD, traductions... |
Base de données |
MySQL ou PostgreSQL |
MySQL, MariaDB, Percona Server ou équivalent, PostgreSQL, SQLite |
Configuration |
Fichiers YAML : parameters.yml , config.yml ... |
Fichiers YAML |
1.2 Fonctionnalités
|
eZ Publish |
Drupal |
Gestion des pages/templates |
Oui |
Oui |
Gestion de blocs |
Oui |
Oui (modules Block et Custom Block) |
Mediathèque |
Oui |
Oui avec gestion des breakpoints (images responsive) |
Workflow de publication |
Oui |
Oui (module Revisioning) |
Site multilingue |
Oui |
Oui |
E-commerce |
Oui |
Oui (module Commerce en cours de développement) |
Flux RSS |
Oui |
|
Moteur de recherche |
Oui |
Oui (module Search) |
Gestion de droits utilisateurs |
Oui |
Oui (module User) |
Scripts CronJobs |
Oui |
Oui (module Actions) |
Mobilité et responsive |
Oui |
Oui (module Breakpoint) |
Support HTML5 |
Oui |
Oui |
Globalement, ces 2 CMS offrent des fonctionnalités très similaires. eZ
Publish embarque nativement de nombreux modules ce qui en fait un produit
très complet dès son installation. Drupal propose nativement des
fonctionnalités beaucoup plus simples, l’utilisation de modules
complémentaires sera parfois nécessaire selon les besoins de votre
application.
2. Utilisation des composants Symfony2
Pendant des années, Drupal et eZ Systems ont développés pour leurs CMS
leurs propres composants : routing, templating, cache... entraînant
ainsi de nombreuses contraintes :
- Lourde maintenance de l’ensemble du code
- Peu de standardisation
- Peu de réutilisabilité de l’existant rendant l’apprentissage du CMS fastidieux par les développeurs
-
Intégration difficile dans des applications nécessitant une certaine
logique métier (site d’annonces en ligne, réseau social, site
e-commerce etc.)
- etc.
L’émergence des frameworks PHP sur le marché a fait prendre conscience à ces
développeurs/éditeurs qu’il serait judicieux de ne plus réinventer la roue
et de se baser sur des composants existants. Ceux-ci se sont alors tournés
vers la communauté Symfony qui propose une grande variété de composants :
HttpKernel, Cache, Class Loader, Routing, Injection de dépendance etc.
Ce rapprochement a généré de nombreux avantages :
-
Il permet aux contributeurs de ces 2 CMS de se concentrer sur leur cœur
de métier, la gestion de contenu, et de proposer ainsi une meilleure
expérience utilisateur dans ce domaine,
-
Les composants développés par la communauté Symfony respectent des
standards stricts ainsi que des bonnes pratiques définies par la
communauté PHP : PSR-0, Namespaces, Composer, Programmation Orientée
Objet, PHPUnit etc.
-
Une meilleure interopérabilité entre le système de gestion de contenu
(CMS) et les briques métiers de vos applications (gestion de news,
boutique en ligne, gestion d’annonces etc.),
-
Utilisation de la couche HTTP de Symfony pour une meilleure gestion du
cache,
- Homogénéisation du système de templating (Twig),
- Disponibilité d'API REST (flux de données multi-canal),
- Tests unitaires et fonctionnels améliorés,
- Montée en compétence facilitée pour les développeurs Symfony2.
Nous noterons une différence notable entre ces 2 CMS qui vous orientera dans
le choix d’utilisation de telle ou telle solution : eZ Publish est basé sur
la version full stack de Symfony alors que Drupal utilise seulement certains
composants.
2.1 Composants utilisés par Drupal
ClassLoader |
HttpFoundation |
Serializer |
DependencyInjection |
HttpKernel |
Validator |
EventDispatcher |
Routing |
Yaml |
2.2 Composants utilisés par eZ Publish (full-stack)
BrowserKit |
ClassLoader |
Config |
Console |
CssSelector |
Finder |
Form |
Process |
Security |
Translation |
Validator |
Yaml |
Filesystem |
DependencyInjection |
EventDispatcher |
HttpKernel |
Debug |
DomCrawler |
HttpFoundation |
Locale |
Icu |
OptionsResolver |
PropertyAccess |
Routing |
Serializer |
Stopwatch |
Templating |
3. Intégration dans un projet Symfony2
Le composant HttpKernel
permet aux CMS d'être interopérables
avec Symfony2. En d’autres termes, l’intégration de Drupal ou eZ Publish
dans un projet Symfony ou vice versa est donc facilitée.
Dans la suite de cette partie, je vais essayer de vous donner des pistes à
suivre permettant d’intégrer un CMS dans votre application Symfony2 :
3.1 eZ Publish
L'utilisation du full-stack de Symfony2 par eZ Publish permet de faciliter
grandement son intégration dans un projet Symfony2 existant.
Concrètement si vous partez d'un projet Symfony2 existant, les
adaptations restent globalement mineures :
-
Fusionnez votre dossier
app/
avec son équivalent dans
eZPublish ezpublish/
(app/AppKernel.php
= app/EzPublishKernel
et app/AppCache.php
=
`app/EzPublishCache) etc. Je ne donnerai pas ici la liste exhaustive des
changements à opérer.
- Mise à jour de votre
composer.json
.
-
Récupération des dossiers/fichiers
web/
propres à eZ
Publish.
Si vous savez dès le début de votre projet que vous devrez utiliser eZ
Publish, je vous conseille de partir de la version de base de eZ Publish
(https://github.com/ezsystems/ezpublish-community)
et non de la version symfony-standard.
3.2 Drupal
Pour Drupal, je ne vais pas vous détailler ici la méthode permettant
d'intégrer ce CMS dans un projet Symfony2, je vous renvoie tout
simplement vers 2 ressources très intéressantes :
A ce jour, la distribution de Drupal est en version Alpha 6, ce qui signifie
que ce bundle prometteur évoluera au fur et à mesure. A surveiller ces
prochains mois ... ;)
4. Conclusion
J’espère que cet article vous aura permis de mieux connaître Drupal/eZ
Publish et ainsi faciliter votre choix d’utiliser un CMS dans vos
applications Symfony2. De mes recherches sur ces derniers jours concernant
ces 2 CMS, je ne peux en tirer de réelles conclusions sur lequel est le
meilleur et s'intègre le mieux avec Symfony2.
Ces 2 CMS apportent une approche différente :
-
eZ Publish se base sur Symfony2 Full stack ce qui facilite nativement
son intégration avec un projet Symfony2 mais est, à mon sens, un peu
trop lourd (128 tables dans la base de données !!!),
-
Drupal est relativement léger de base et ses fonctionnalités peuvent
être aisément étendues par l'installation de modules complémentaires.
Nativement, son intégration dans Symfony2 pourrait être réellement
fastidieuse mais le bundle
TheodoDrupalBundle
permet de
palier à cette problématique.
Je ne vous ai parlé que de Drupal et d'eZ Publish, mais d'autres CMS/CMF se
basent aussi sur Symfony2 :
Symfony CMF,
Init Cms,
Sulu CMF,
Midgard etc.
Je vous invite à les découvrir !
Quelques ressources complémentaires :