Symfony 3.4 - Jak rozszerzyc klase z folderu Component?

Symfony 3.4 - Jak rozszerzyc klase z folderu Component?
poniatowski
  • Rejestracja:ponad 16 lat
  • Ostatnio:23 dni
  • Postów:1658
0

Witam,

Jak moze rozszerzyc klase z folderu Component? Czy musze tworzyc bundle? Czy moge rozszerzyc klasy przez dziedziczenie z kazdego miejsca w projekcie?

Tutaj jest struktura folderow: https://ibb.co/gDjhFf

Musze nadpisac klase: /OpenLoyalty/Component/Customer/Infrastructure/SystemEvent/Listener/CalculateCustomerLevelListener.php

Bundle folder i Component sa na tym samym poziomie. To chyba nie da rady tego rozszerzyc tj bundle. I PHP inheritance tez raczej nie zadziala.

edytowany 2x, ostatnio: poniatowski
Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:prawie 2 lata
  • Lokalizacja:Wrocław
  • Postów:13042
0

Skąd możemy wiedzieć czym u Ciebie są klasy w folderze Component?


poniatowski
Sorry, dodalem juz link.
poniatowski
Bundle i Componet foldery sa na tym samym poziomie.
DE
  • Rejestracja:ponad 9 lat
  • Ostatnio:11 miesięcy
  • Postów:1788
1

Możesz rozszerzyć dowolną klasę tak długo, jak nie jest ona zadeklarowana jako final i jest załadowana. W twoim przypadku jest załadowana i nie jest final, więc możesz.

poniatowski
Jakas podpowiedz jak moge to zrobic? Podasz mi jakis przyklad? Z jakiego poziomu mam ja rozszerzyc?
DE
Jak Ty skończyłeś w projekcie z DDD nie mając pojęcia jak rozszerzyć klasę? :D Normalnie tworzysz plik... piszesz class MojaKlasa extends KlasaKtórąChcęRozszerzyć...
poniatowski
Noo, wlasnie tak to nie dziala. Wiem jak rozszerzyc klase w PHP, nie wiem jak rozszerzyc klasy w Symfony fm. Problem jest taki, ze musisz wskazac, zeby Symfony zaczal czytac Twoja klase: KlasaKtórąChcęRozszerzyć, a nie stara klase MojaKlasa.
DE
Pewnie Twoja klasa jest zadeklarowana jako serwis. Musisz poszukać, gdzie jest definicja tego serwisu (w jakimś pliku *.yml) i podmienić na Twoją klasę.
poniatowski
Pliki serwisu sa w folderze vendor. Takze bede musial rozszerzyc i plik serwisu. W takim razie.
DE
  • Rejestracja:ponad 9 lat
  • Ostatnio:11 miesięcy
  • Postów:1788
1

@poniatowski: odpowiadaj w postach.

W jakim vendorze... Tutaj masz ten config i bynajmniej nie siedzi on w vendorze.
Podmień sobie class na ścieżkę do Twojej klasy i tyle.

Kopiuj
 oloy.user.customer.listener.calculate_customer_level:
        class: 'OpenLoyalty\Component\Customer\Infrastructure\SystemEvent\Listener\CalculateCustomerLevelListener'
edytowany 1x, ostatnio: Desu
poniatowski
  • Rejestracja:ponad 16 lat
  • Ostatnio:23 dni
  • Postów:1658
0

@Desu: Ja pracuje na Open Loyalty, to co przeslales to framework. Wiec open-loyalty-framework installuje przez composer. I ostatecznie wsyzstko jest w projekcie open-loyalty w folderze vendor.

edytowany 1x, ostatnio: poniatowski
DE
  • Rejestracja:ponad 9 lat
  • Ostatnio:11 miesięcy
  • Postów:1788
0

To nie rozszerzysz tego tak, jakbyś chciał. Możesz rozszerzyć działanie kodu przez tworzenie własnego listenera i otagowanie go tymi samymi elementami (jeżeli nie przeszkadza Ci to, ze odpali się też "ich", czyli ten z vendoru listener.

edytowany 2x, ostatnio: Desu
poniatowski
  • Rejestracja:ponad 16 lat
  • Ostatnio:23 dni
  • Postów:1658
0

@Desu To troche lipa. Poczytam o tych listenerach. Ale czuje, ze to i tak bedzie sporo zabawy. Bo mam sporo klas do rozszerzenia 4-10 klass (i to tylko na teraz). Dzieki i tak za rady. Milego łikendu.

DE
  • Rejestracja:ponad 9 lat
  • Ostatnio:11 miesięcy
  • Postów:1788
0

Właśnie dlatego pewne rzeczy są robione na eventach, żeby klient mógł nasłuchiwać ma dany event i w prosty sposób dodać jakieś zachowaniem, więc o ile nie przeszkadza Ci to, że ten listener, który chcesz nadpisać się wykona, to po prostu dodaj swój i sprawa załatwiona.

Robisz to w oparciu o tagi. Tworzysz swój listener, dodajesz odpowiednie tagi, które powodują nasłuch na eventy, które Cię interesują i mowisz co ma się wtedy wykonać. Nic prostszego.

Te tagi dodajesz oczywiście w swoim pliki yaml, a nie tym w vendorze. Dla symfony to nie ma znaczenia, bo jest jeden kontener.

edytowany 2x, ostatnio: Desu

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.