fbpx

Czym jest bundle? – pakiet wiedzy o Symfony

Czym jest bundle? – pakiet wiedzy o Symfony

Dzisiejszy tekst jest pakietem podstawowej wiedzy dotyczącej Symfony. Jeśli chcesz bliżej poznać ten framework to zachęcam Cie do przeczytania i poznania odpowiedzi na pytanie, czym jest bundle.

Czym jest bundle?

Bundle to konstrukcja charakterystyczna dla Symfony. Jest czymś jak wtyczka w WordPressie czy extension w Magento. Różnica jest taka, że w WP czy Magento mamy core aplikacji a wtyczki, czy extensiony są jedynie rozszerzeniami. W Symfony wszystko jest bundlem, nawet core. Bardzo dobrze to widać porównując Symfony i Silexa — microframework od SensioLaba. O Silexie pewnie jeszcze napisze, ale już dziś lekko go wprowadzę. Gdy pierwszy raz o nim usłyszałam, powiedziano mi, że to taki szkielet Symfony bez Symfony. Do tej pory mi się to mniej więcej sprawdza, są jednak szczegóły, które zaprzeczają tej definicji. W końcu to microframework, a Symfony to kobyła, która potrafi uciągnąć ogromne aplikacje.

Wracając do idei bundla, powinna być to struktura zamykająca w sobie pewną wydzieloną paczkę funkcjonalności. W idealnym przypadku jego struktura powinna być tak zbudowana, aby programista był w stanie go przenosić między projektami bez większych problemów, dostosowując jedynie interfejsy, a komunikacja opierała się na serwisach. Jeśli chodzi o strukturę folderów, to prawidłowa powinna wyglądać w ten sposób:

src/LimeCoding/UserBundle/

gdzie

  • src/ to katalog Symfony przeznaczony do bundli dedykowanych dla tej aplikacji.
  • LimeCoding to katalog firmy/autora bundla.
  • UserBundle katalog – nazwa bundla, powinna ona być zgodna z  funkcjonalnościami, które zawiera lub jakiej części systemu się tyczy.

Struktura 

Na zdjęciu obok widzimy przykładową, zgodną z dokumentacją strukturę bundla. Oczywiście są to foldery, które sugerują nam autorzy frameworka, osobiście traktuję to bardzo luźno. Bo co w przypadku gdy potrzebują stworzyć logikę biznesową opartą np. na wzorcu strategi? Gdzie mam umieścić odpowiednie klasy? W takiej sytuacji stworzę sobie folder TestStrategy albo inną strukturę, którą potrzebuje. Kolejnym przykładem mogą być formularze. W przypadku gdy potrzebuje je przygotować tworze folder Form, gdy potrzebuję Encji – Entity itd. Dla przykładu zdjęcie poniżej po prawej prezentuje strukturę bundla z mojego innego projektu. Jest różnica, prawda?

Uważam, że elastyczna struktura jest w tym przypadku zaletą. Różne podejścia do architektury wymagają od programistów różnych elementów. Pracuję nad projektem, który został napisany z użyciem modelowania domeny, czyli DDD (Domain-Driven Design) to podejście determinuje, aby w strukturze pojawił się folder Domain, niektóre pojęcia np. Command jest czymś innym w Symfony, a czymś innym w DDD. Dzięki elastycznej strukturze folderów możemy tak rozmieścić klasy, aby jasno można było odróżnić jedne od drugich.

Nie chcę tutaj opisywać już poszczególnych folderów, ponieważ ich nazwy są jednoznaczne i zgodne z ich docelową zawartością. Jedyne, na co chciałabym zwrócić uwagę to foldery, które są wymagane. Jednym z nich jest Resources. W nim znajdziemy konfigurację bundla, frontowe templatki (Resources/config/views), pliki tłumaczeń (Resources/config/translations) i co najważniejsze definicje serwisów (Resources/config/services). Gdy już stworzymy odpowiednie klasy i zdefiniujesz je w odpowiednich plikach, kolejnym krokiem jest ich zapisanie do DI. Co to oznacza? Pliki z Resources/config/services — musimy zdefiniować w pliku Configurations.php w folderze DependencyInjection.

Rejestracja

Aby nasz bundle zaczął działać, potrzebujemy do dodać do pliku app/AppKernel.php. Metoda registerBundles() zawiera definicje wszystkich zarejestrowanych bundli. Co ciekawe, możemy je rejestrować w zależności od środowiska np. jeśli potrzebujemy np. bundla do fixtur jedynie na środowiskach developerskich i testowych, to w funkcji definiujemy:

if (in_array($this->getEnvironment(), ['dev', 'test'], true)) {
   $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();
}

Generowanie

Symfony daje bardzo fajną i szybką komendę do generowania podstawowej struktury bundla, która jednocześnie rejestruje do w AppKernel.php.

bin/console generate:bundle

Mam nadzieję, że post zawiera wszystkie niezbędne informacje i wiesz już czym jest bundle. Jeśli coś jest dla Ciebie nie jasne albo potrzebujesz rady lub masz pytanie, pisz  śmiało w komentarzu.

Zgarnij darmowy ebook i cotygodniową dawkę wiedzy

.
Magdalena Limanówka-Kuciel
magdalena@panizkomputerem.pl

Jestem programistką, która lubi mieć ręce pełne roboty. Do życia potrzebuje komputera z internetem i kubka gorącej kawy. Więcej na stronie o mnie.