magento2

Nadpisywanie klas przy użyciu Preferencji

W poprzednich postach dotyczących Magento 2 pisałem o przesłanianiu szablonów. Jeśli nie znasz jeszcze tych zagadnień to odwiedź poniższe linki:

Teraz czas na nadpisywanie klas. Wiedz, że nie jest to trudne. Standardowy sposób, który opiszę na przykładzie kontrolera, równie dobrze sprawdzi się w nadpisywaniu modeli, bloków, klas pomocniczych, czyli helperów itd.

Nadpisywanie klas stosujemy w sytuacji, kiedy chcemy rozszerzyć jakieś funkcjonalności lub dodać nowe. Oczywiście nie możemy tego zrobić w vendorze, bo przy jakiejkolwiek aktualizacji systemu, utracimy wprowadzone zmiany i będziemy musieli je ponownie wdrażać. To nie jest dobra praktyka. W takiej sytuacji trzeba skorzystać z przesłaniania i nadpisać odpowiednią klasę lub klasy.

PRZYKŁAD

W poniższym przykładzie nadpiszę klasę kontrolera: CreatePost.php, która obsługuje m.in. przekierowania na odpowiednią stronę po założeniu konta. Do pliku wprowadzę minimalną poprawkę, która wyłączy automatyczne logowanie do konta po prawidłowym zarejestrowaniu się.

1. Tworzymy nowy moduł. W tym celu zapisujemy dwa pliki w lokalizacji:

  • app/code/Geek/Customer/registration.php
  • app/code/Geek/Customer/etc/module.xml

gdzie Geek/Customer – to przykładowa nazwa przestrzeni nazw / nazwa modułu, z których będziemy korzystać w poszczególnych plikach.

Rejestrujemy moduł w registration.php:

Zapisujemy konfiguracje w module.xml:

2. Tworzymy plik di.xml (etc/di.xml). W tym pliku konfigurujemy zależności, które są wstrzykiwane przez menadżer obiektów (object manager). Korzystając z preferencji, w parametrze for wskazujemy adres do klasy, która zostanie nadpisana (vendor/magento/module-customer/Controller/Account/CreatePost.php). Natomiast type wskazuje nową lokalizację pliku, w naszym module (app/code/Geek/Customer/Controller/Account/CreatePost.php).

3. Kopiujemy plik CreatePost.php z vendora do modułu.

Aktualizujemy w nim przestrzeń nazw:

oraz usuwamy lub komentujemy zapis (w linii 379):

Poniżej kod całej klasy po zmianach:

Oczywiście klasę możesz rozszerzać o własne funkcjonalności.

I to wszystko w temacie 🙂

Do następnego =>


Leave a Comment

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *