Symfony - Pacotes

Um pacote Symfony é uma coleção de arquivos e pastas organizados em uma estrutura específica. Os pacotes são modelados de forma que possam ser reutilizados em vários aplicativos. O próprio aplicativo principal é empacotado como um pacote e geralmente é chamadoAppBundle.

Um pacote pode ser empacotado especificamente para um aplicativo, como AdminBundle (seção de administração), BlogBundle (blog do site), etc. Esses pacotes não podem ser compartilhados entre um aplicativo. Em vez disso, podemos modelar uma determinada parte do aplicativo, como blogs, como pacote genérico para que possamos simplesmente copiar o pacote de um aplicativo para outro aplicativo para reutilizar a funcionalidade de blog.

Estrutura de um pacote

A estrutura básica de um pacote é a seguinte.

  • Controller - Todos os controladores precisam ser colocados aqui.

  • DependencyInjection - Todos os códigos e configurações relacionados à injeção de dependência precisam ser colocados aqui.

  • Resources/config - As configurações relacionadas ao pacote são colocadas aqui.

  • Resources/view - Os modelos de visualização relacionados ao pacote são colocados aqui.

  • Resources/public - Folhas de estilo relacionadas ao pacote, JavaScripts, imagens, etc., são colocados aqui.

  • Tests - Arquivos de teste de unidade relacionados ao pacote são colocados aqui.

Criação de um pacote

Vamos criar um pacote simples, TutorialspointDemoBundle na nossa HelloWorld inscrição.

Step 1- Escolha um namespace. O namespace de um pacote deve incluir o nome do fornecedor e o nome do pacote. No nosso caso, éTutorialspoint\DemoBundle.

Step 2 - Crie uma classe vazia, TutorialspointDemoBundle estendendo Bundle classe e coloque-o sob src/Tutorialspoint/DemoBundle.

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

class TutorialspointDemoBundle extends Bundle { 
}

Step 3 - Registre a turma na lista de bundles suportados pelo aplicativo em AppKernel classe.

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

Isso é tudo o que é necessário para criar um pacote vazio e todos os outros conceitos são iguais aos do aplicativo. Symfony também oferece um comando de consolegenerate:bundle para simplificar o processo de criação de um novo pacote, que é o seguinte.

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