Magento 2 ma koncepcję Wtyczki / Przechwytywanie / Przechwytywanie w przeciwieństwie do Magento 1.
Działają one jak przed | po wydarzeniu dla każdej publicznej metody. Co jest miłe.
Możesz również użyć around
wtyczki, aby zastąpić funkcjonalność metody.
Ale Magento 2 nadal oferuje możliwość przepisywania klas mniej więcej w sposób M1.
Chciałbym zobaczyć kilka przykładów, w których zamiast pisać wtyczki należy przejść do przepisywania klas.
Wiem, że jest to przydatne, gdy chcesz zmienić zachowanie podstawowej metody chronionej, ale czy istnieją inne przypadki, w których przepisanie jest zalecane lub potrzebne?
17
Odpowiedzi:
Oczywistym powodem użycia przepisywania zamiast wtyczki jest to, że musisz zastąpić prywatne, chronione lub końcowe metody .
Ale rozważ także następujące scenariusze.
Pierwszy scenariusz (bezwzględna kolejność sortowania):
Przepisywanie może być przydatne, gdy chcesz uruchomić kod przed wtyczkami . Wiem, że możesz to zrobić, ustawiając wtyczkę
sortOrder
, ale nie możesz być pewien, że Twój kod zawsze będzie pierwszy, gdy ktoś (nie ty) zamierza zainstalować komponenty innych firm.Drugi scenariusz (wyklucz kod):
Jeśli chcesz wykluczyć lub przepisać tylko fragment kodu w metodzie, wtyczka może być nieoptymalnym sposobem. Wiem, że możesz użyć
around
wtyczki i uniknąć wywoływaniaproceed
, ale może to uszkodzić inne wtyczki na stosie.Scenariusz trzeci (styl kodu):
Powinieneś używać przepisywania, gdy musisz przepisać zachowanie, wtyczki powinny być używane do modyfikowania danych wyjściowych lub uruchamiania kodu przed / po.
Wtyczka powinna zawsze uruchamiać oryginalny kod, aby uniknąć uszkodzenia innych modułów.
Mój wniosek:
Jeśli możesz rozważyć podstawową metodę jako czarną skrzynkę z wejściem i jednym wyjściem, a ty jesteś agnostyczny w zakresie jej wewnętrznych mechanizmów, wtyczka może być najlepszą opcją.
Jeśli chcesz zmienić zachowanie wewnętrzne , najlepszym rozwiązaniem może być przepisanie.
źródło
Świetne pytanie, któregoś dnia zadałem sobie to samo i oto, co wymyśliłem:
Źródło: Kurs podstawowy Magento U
źródło