Bonjour !

Je suis, depuis septembre, sur un projet web en Sf2 pour mon entreprise.
Ce projet se decoupe en deux grosse parties :
- Un site de vente. => vente.entreprise.com
- Un site plus "corporate" (actus sur l'entreprise, infos sur les produits, tests, nouveautés). => entreprise.com

Les deux doivent être liés car le site corporate peut, par exemple, être amené à proposer des recommandations de ventes suivant la page visitée. Les interactions ne s’arrêtent pas là et c'est pour ça que j'aimerai les interfacer un maximum, donc au mieux les localiser dans la même application.

Pour des raisons de recette et de communication, il m'a été imposé de réaliser en premier lieu le site de vente sur le sous-domaine vente.entreprise.com. Ce site est aujourd'hui terminé.


Aujourd'hui je dois donc réaliser le site corporate et j'aimerai ne pas avoir à créer une autre application Sf2. Néanmoins je veux :
  • Du routing indépendant selon le sous-domaine : Si entreprise.com/xxx existe, vente.entreprise.com/xxx peut ne pas exister et retourner une 404.
  • Pouvoir accéder aux controllers/resources des Bundles du site vente.entreprise.com, car il y certains composants/widgets qui vont devoir être repris : j'aimerai pouvoir utiliser {% render %} et {% include %} en toute transparence.
  • Pouvoir utiliser les entities du bundle du site vente.entreprise.com en plus de celles de entreprise.com, et ce sans les dupliquer.
  • Dans le meilleur des mondes, pouvoir importer des routes dans le ficher app/routing.yml avec le subdomain en requirement (à la manière du préfixe).


Ça, c'est bien sur le scénario idéal, dans la réalité je vais certainement devoir faire des concessions.

Dans Symfony 1.4, il était possible de tenir compte du sous-domaine lors de la définition des routes, et c'est aussi possible avec Zend Framework. Malheureusement, pour une raison que j'ignore, ceci n'est pas (encore?) supporté nativement par Sf2.

J'ai fait pas mal de recherches et je suis tombé sur plusieurs cas d'utilisations et tentatives de solutions :


Dans la pratique, je pensais enfin avoir trouvé une solution propre avec ceci : Symfony2 - routing with subdomains.

=> Créer deux front controllers, et charger un AppKernel différent selon le front qui est appelé, afin de pouvoir charger des configurations et routes différentes.

J'ai donc crée un autre AppKernel que j'ai appelé, pour le bien de cette discussion, CorpoKernel, qui fait exactement la même chose que l'AppKernel par défaut sauf qu'il charge les bundles des deux sites et va chercher une configuration différente.

Mon probleme avec cette solution : je m'embrouille les pinceaux avec le cache. En effet, des que je recharge l'AppKernel par defaut, Symfony met toute la config en cache et même en bootant sur l'autre front controller, la config chargée sera celle que l'AppKernel par défaut appelle, puisqu'elle est en cache.
En d'autres mots, des que je boot une fois sur mon front controller vente, peut importe ce que je fais, booter sur l'un ou sur l'autre me chargera toujours la config du front controller vente, mise en cache, et donc les routes qui vont avec.

Voila... je ne sais même pas si cette solution est la meilleure; en réalité le must serait d'override les classes d'importation de routes de Symfony pour prendre en compte l'host, mais ça, je pense que c'est au dessus de mes compétences actuelles.


Si quelqu'un a des conseils sur la meilleure façon d’implémenter tout ça, que ce soit avec une solution que j'ai évoquée ou une autre, je suis plus que preneur.


Merci !