Symfony - Bundles

Un bundle Symfony est une collection de fichiers et de dossiers organisés dans une structure spécifique. Les bundles sont modélisés de manière à pouvoir être réutilisés dans plusieurs applications. L'application principale elle-même est présentée sous forme de bundle et est généralement appeléeAppBundle.

Un bundle peut être packagé spécifique à une application telle que AdminBundle (section admin), BlogBundle (blog du site), etc. Ces bundles ne peuvent pas être partagés entre une application. Au lieu de cela, nous pouvons modéliser une certaine partie de l'application, comme les blogs, en tant que bundle générique afin de pouvoir simplement copier le bundle d'une application vers une autre application pour réutiliser la fonctionnalité du blog.

Structure d'un bundle

La structure de base d'un bundle est la suivante.

  • Controller - Tous les contrôleurs doivent être placés ici.

  • DependencyInjection - Tous les codes et configurations liés à l'injection de dépendances doivent être placés ici.

  • Resources/config - Les configurations liées au bundle sont placées ici.

  • Resources/view - Les modèles de vue liés au bundle sont placés ici.

  • Resources/public - Les feuilles de style, JavaScripts, images, etc. liés au bundle sont placés ici.

  • Tests - Les fichiers de test unitaire liés au bundle sont placés ici.

Créer un bundle

Créons un simple bundle, TutorialspointDemoBundle dans notre HelloWorld application.

Step 1- Choisissez un espace de noms. L'espace de noms d'un bundle doit inclure le nom du fournisseur et le nom du bundle. Dans notre cas, c'estTutorialspoint\DemoBundle.

Step 2 - Créez une classe vide, TutorialspointDemoBundle en prolongeant Bundle classe et placez-le sous src/Tutorialspoint/DemoBundle.

namespace Tutorialspoint\DemoBundle; 
use Symfony\Component\HttpKernel\Bundle\Bundle;  

class TutorialspointDemoBundle extends Bundle { 
}

Step 3 - Enregistrez la classe dans la liste des bundles pris en charge par l'application dans AppKernel classe.

public function registerBundles() { 
   $bundles = array( 
      // ... 
      // register your bundle 
      new Tutorialspoint\DemoBundle\TutorialspointDemoBundle(), 
   ); 
   return $bundles; 
}

C'est tout ce qui est nécessaire pour créer un bundle vide et tous les autres concepts sont les mêmes que ceux de l'application. Symfony fournit également une commande de consolegenerate:bundle pour simplifier le processus de création d'un nouveau bundle, qui est comme suit.

php bin/console generate:bundle --namespace = Tutorialspoint/DemoBundle

Résultat

Welcome to the Symfony bundle generator!

Are you planning on sharing this bundle across multiple applications? [no]: no  

Your application code must be written in bundles. This command helps 
you generate them easily.  

Give your bundle a descriptive name, like BlogBundle. 
Bundle name [Tutorialspoint/DemoBundle]:   

In your code, a bundle is often referenced by its name. It can be the 
concatenation of all namespace parts but it's really up to you to come 
up with a unique name (a good practice is to start with the vendor name). 
Based on the namespace, we suggest TutorialspointDemoBundle.  

Bundle name [TutorialspointDemoBundle]:  
Bundles are usually generated into the src/ directory. Unless you're 
doing something custom, hit enter to keep this default!
Target Directory [src/]:   

What format do you want to use for your generated configuration?  

Configuration format (annotation, yml, xml, php) [annotation]:

Bundle generation

> Generating a sample bundle skeleton into app/../src/Tutorialspoint/DemoBundle 
   created ./app/../src/Tutorialspoint/DemoBundle/ 
   created ./app/../src/Tutorialspoint/DemoBundle/TutorialspointDemoBundle.php 
   created ./app/../src/Tutorialspoint/DemoBundle/Controller/ 
   created ./app/../src/Tutorialspoint/DemoBundle/Controller/DefaultController.php 
   created ./app/../tests/TutorialspointDemoBundle/Controller/   
   created ./app/../tests/TutorialspointDemoBundle/Controller/DefaultControllerTest.php 
   created ./app/../src/Tutorialspoint/DemoBundle/Resources/views/Default/   
   created ./app/../src/Tutorialspoint/DemoBundle/Resources/views/Default/index.html.twig 
   created ./app/../src/Tutorialspoint/DemoBundle/Resources/config/ 
   created ./app/../src/Tutorialspoint/DemoBundle/Resources/config/services.yml 
> Checking that the bundle is autoloaded 
> Enabling the bundle inside app/AppKernel.php 
   updated ./app/AppKernel.php 
> Importing the bundle's routes from the app/config/routing.yml file 
   updated ./app/config/routing.yml 
> Importing the bundle's services.yml from the app/config/config.yml file 
   updated ./app/config/config.yml 
Everything is OK! Now get to work :).