Symfony 3.4 - Jak rozszerzyc klase z folderu Component?

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.

0

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

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.

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.

 oloy.user.customer.listener.calculate_customer_level:
        class: 'OpenLoyalty\Component\Customer\Infrastructure\SystemEvent\Listener\CalculateCustomerLevelListener'
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.

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.

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.

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1