Symfony - pakiety

Pakiet Symfony to zbiór plików i folderów zorganizowanych według określonej struktury. Pakiety są modelowane w taki sposób, aby można je było ponownie wykorzystać w wielu aplikacjach. Sama aplikacja główna jest spakowana w pakiecie i jest zwykle nazywanaAppBundle.

Pakiet może być spakowany specjalnie dla aplikacji, takiej jak AdminBundle (sekcja administratora), BlogBundle (blog witryny) itp. Takie pakiety nie mogą być współużytkowane między aplikacjami. Zamiast tego możemy modelować pewną część aplikacji, taką jak blogi, jako ogólny pakiet, dzięki czemu możemy po prostu skopiować pakiet z jednej aplikacji do innej, aby ponownie wykorzystać funkcjonalność bloga.

Struktura pakietu

Podstawowa struktura pakietu jest następująca.

  • Controller - Tutaj należy umieścić wszystkie kontrolery.

  • DependencyInjection - Cały kod i konfigurację związane z wstrzykiwaniem zależności należy umieścić tutaj.

  • Resources/config - Konfiguracje związane z pakietami są umieszczane tutaj.

  • Resources/view - Tutaj umieszczane są szablony widoków związane z pakietami.

  • Resources/public - Arkusze stylów związane z pakietami, skrypty JavaScript, obrazy itp. Są umieszczane tutaj.

  • Tests - Pliki testów jednostkowych związane z pakietami są umieszczane tutaj.

Tworzenie pakietu

Stwórzmy prosty pakiet, TutorialspointDemoBundle w naszym HelloWorld podanie.

Step 1- Wybierz przestrzeń nazw. Przestrzeń nazw pakietu powinna zawierać nazwę dostawcy i nazwę pakietu. W naszym przypadku tak jestTutorialspoint\DemoBundle.

Step 2 - Utwórz pustą klasę, TutorialspointDemoBundle rozszerzając Bundle klasę i umieść ją pod src/Tutorialspoint/DemoBundle.

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

class TutorialspointDemoBundle extends Bundle { 
}

Step 3 - Zarejestruj klasę na liście pakietów obsługiwanych przez aplikację w formacie AppKernel klasa.

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

To wszystko jest potrzebne do utworzenia pustego pakietu, a wszystkie inne koncepcje są takie same jak w aplikacji. Symfony udostępnia również polecenie konsoligenerate:bundle aby uprościć proces tworzenia nowego pakietu, który jest następujący.

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

Wynik

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