Symfony - Paquetes

Un paquete de Symfony es una colección de archivos y carpetas organizados en una estructura específica. Los paquetes se modelan de tal manera que se pueden reutilizar en múltiples aplicaciones. La aplicación principal en sí está empaquetada como un paquete y generalmente se llamaAppBundle.

Se puede empaquetar un paquete específico para una aplicación como AdminBundle (sección de administración), BlogBundle (blog del sitio), etc. Dichos paquetes no se pueden compartir entre una aplicación. En su lugar, podemos modelar una determinada parte de la aplicación, como blogs, como un paquete genérico para que podamos simplemente copiar el paquete de una aplicación a otra para reutilizar la funcionalidad del blog.

Estructura de un paquete

La estructura básica de un paquete es la siguiente.

  • Controller - Todos los controladores deben colocarse aquí.

  • DependencyInjection - Todo el código y la configuración relacionados con la inyección de dependencias deben colocarse aquí.

  • Resources/config - Las configuraciones relacionadas con el paquete se colocan aquí.

  • Resources/view - Las plantillas de vistas relacionadas con el paquete se colocan aquí.

  • Resources/public - Aquí se colocan las hojas de estilo, los JavaScripts, las imágenes, etc. relacionados con el paquete.

  • Tests - Los archivos de prueba unitaria relacionados con el paquete se colocan aquí.

Crear un paquete

Creemos un paquete simple, TutorialspointDemoBundle en nuestro HelloWorld solicitud.

Step 1- Elija un espacio de nombres. El espacio de nombres de un paquete debe incluir el nombre del proveedor y el nombre del paquete. En nuestro caso, esTutorialspoint\DemoBundle.

Step 2 - Crea una clase vacía, TutorialspointDemoBundle extendiendo Bundle clase y colocarlo debajo src/Tutorialspoint/DemoBundle.

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

class TutorialspointDemoBundle extends Bundle { 
}

Step 3 - Registre la clase en la lista de paquetes admitidos por la aplicación en AppKernel clase.

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

Esto es todo lo que se necesita para crear un paquete vacío y todos los demás conceptos son los mismos que los de la aplicación. Symfony también proporciona un comando de consolagenerate:bundle para simplificar el proceso de creación de un nuevo paquete, que es el siguiente.

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

Resultado

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