Devblog développement web, WordPress & WooCommerce

Symfony2 : créer plusieurs applications

S

Il n’est généralement pas nécessaire, en Symfony2, d’avoir plusieurs applications sur le même Symfony.
Cependant, cela peut être pratique si on a plusieurs sites, sur des domaines différents, qui vont se baser sur les mêmes ressources.

Créer deux applications

Pour l’exemple nous dirons que nous voulons 2 applications : app1 et app2.
Voici comment procéder :

  • dupliquer /web et les nommer /web-app1 et /web-app2
  • faire 2 domaines qui pointent respectivement dans les dossiers de symfony /web-app1 et /web-app2
  • dupliquer /app et les nommer /app1 et /app2
  • modifier les fichiers /web*/app.php et /web*/app_dev.php : remplacer les /app/ par /app1/ ou /app2/ dans les inclusions de fichiers.

C’est tout !

Avoir nos deux dossiers « web » distincts nous permet de bien séparer, pour les deux sites, les feuilles de style, les images, les gabarits de base etc.
Par exemple, si on a un bundle qui affiche l’image « logo.png », suivant l’application dans laquelle on est (en fonction de notre domaine donc), cela affichera une image différente.

Avoir nos deux dossiers « app » va notamment nous permettre d’avoir des configurations différentes pour nos deux apps, que ce soit la config base de données, ou d’autres paramètres nécessaires aux bundles.

Aller plus loin

Savoir, au sein d’un bundle, dans quelle application on est

Pour savoir dans quelle application on est :

  • dans les 2 fichiers parameters.yml, ajouter une constante
    nom_application: 'app1'
  • dans le controller d’un bundle on y accède ainsi :
    $app = $this->container->getParameter('nom_application');

Avoir des vues twig différentes en fonction de l’application

Voici comment, dans un contrôleur, charger une vue twig différente en fonction de l’application :

$app = $this->container->getParameter('nom_application');
 return $this->render('MonBundle:'.$app.':index.html.twig', array('name' => $name));

NB : Attention toutefois, il me semble que le contrôleur d’un bundle ne devrait théoriquement pas savoir dans quelle application il se trouve. De même, normalement c’est au niveau de l’application que l’on devrait redéfinir les templates, et non au niveau du contrôleur, parce que le bundle devient alors dépendant de nos applications.
Cependant, si on a des bundles qui sont par nature dépendants de nos applications, cette solution me semble assez logique pour permettre une gestion de tous les cas de figure du bundle, directement au sein de celui-ci.
Si vous avez des avis ou une meilleure façon de faire n’hésitez pas à laisser un commentaire.

Devblog développement web, WordPress & WooCommerce

Articles récents

Catégories