Wpis z mikrobloga

do czego używa się compiler pass ?


@moporzysta: Pytanie trochę jak "do czego używa się pętli foreach" - bo mniej więcej taką funkcję spełniają CompilerPassy. Do wszystkiego, co sobie wymyślisz ;-)
Zajrzyj do kodu różnych bundli, czy kodu samego Symfony i zobacz do czego używają.

Przykładowo compiler pass może service'y oznaczone tagiem 'twig.extension' zarejestrować w module Twiga.
Albo dla klas posiadających ContainerAwareTrait wstrzykuje zależność kontenera.

W samym frameworku Symofny jest kilkadziesiąt
@zakopiak: dziękuje za odpowiedz. Jeżeli dobrze rozumiem, dzięki temu ze istnieje compiler pass do tagu twig.extensions to mając włączone autoconfigure nie muszę nic robić i sam się zarejestruje w module twiga ?
@moporzysta: autoconfigure, to krok jeszcze dalej, bo nie musisz nawet dodawać danego rozszerzenia Twiga do services.yml, a któryś tam CompilesPass sam ogarnie. Także w tym scenariuszu nawet nie ma mowy o tagu, bo nie ma konfiguracji ;-)

Gdyby nie było tagów, to musiałbyś stworzyć jakiś config z listą rozszerzeń Twiga, które mają być zarejestrowane. To by skutkowało konfiguracją tej klasy w dwóch miejscach. Można powiedzieć, że tagi, to taka forma
@moporzysta: No i jestem. Powiedzmy że tworzysz Dashboard z Widgetami. Chciałbyś aby inni programiści mieli możliwość dodawania do niego swoje widgety.

Jako laik, pewnie byś zrobił coś takiego:

$dashboard = new Dashboard();
$dashboard->addWidget(new WidgetOne());
$dashboard->addWidget(new Widget2());
$dashboard->addWidget(new Widget3());
$dashboard->addWidget(new Widget4());

Czyli byś zdefiniował na stałe widgety/ hardcoded. I tutaj jest problem, bo jak dodać widget bez modyfikacji kodu? Przecież jak zainstalujesz jakiegoś bundla, fajnie by było gdyby sam dodał widget to
K.....a - @moporzysta: No i jestem. Powiedzmy że tworzysz Dashboard z Widgetami. Chci...

źródło: comment_1593501412uDQxahfu6zdxykWVQTxeyP.jpg

Pobierz