Symfony - Pacchetti

Un bundle di Symfony è una raccolta di file e cartelle organizzati in una struttura specifica. I bundle sono modellati in modo tale da poter essere riutilizzati in più applicazioni. L'applicazione principale stessa è confezionata come un pacchetto ed è generalmente chiamataAppBundle.

Un bundle può essere impacchettato in modo specifico per un'applicazione come AdminBundle (sezione di amministrazione), BlogBundle (blog del sito), ecc. Tali bundle non possono essere condivisi tra un'applicazione. Invece, possiamo modellare una certa parte dell'applicazione come i blog come bundle generico in modo da poter semplicemente copiare il bundle da un'applicazione a un'altra applicazione per riutilizzare la funzionalità del blog.

Struttura di un bundle

La struttura di base di un bundle è la seguente.

  • Controller - Tutti i controller devono essere posizionati qui.

  • DependencyInjection - Tutto il codice e la configurazione relativi all'inserimento delle dipendenze devono essere inseriti qui.

  • Resources/config - Le configurazioni relative al bundle sono posizionate qui.

  • Resources/view - I modelli di vista relativi al pacchetto vengono inseriti qui.

  • Resources/public - Qui vengono inseriti fogli di stile, JavaScript, immagini, ecc. Relativi ai bundle.

  • Tests - I file di unit test relativi al pacchetto vengono inseriti qui.

Creazione di un pacchetto

Creiamo un semplice pacchetto, TutorialspointDemoBundle nel nostro HelloWorld applicazione.

Step 1- Scegli uno spazio dei nomi. Lo spazio dei nomi di un pacchetto dovrebbe includere il nome del fornitore e il nome del pacchetto. Nel nostro caso lo èTutorialspoint\DemoBundle.

Step 2 - Crea una classe vuota, TutorialspointDemoBundle estendendo Bundle class e posizionalo sotto src/Tutorialspoint/DemoBundle.

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

class TutorialspointDemoBundle extends Bundle { 
}

Step 3 - Registra la classe nell'elenco dei bundle supportati dall'applicazione in AppKernel classe.

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

Questo è tutto ciò che serve per creare un bundle vuoto e tutti gli altri concetti sono gli stessi dell'applicazione. Symfony fornisce anche un comando da consolegenerate:bundle per semplificare il processo di creazione di un nuovo pacchetto, che è il seguente.

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

Risultato

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 :).