Magento 2: Eklenti ile Gözlemci


27

Magento 2'de, bir şeyi elde etmek için bir gözlemciye karşı bir eklenti kullanmanın artıları ve eksileri nelerdir?

Eklentilerin bir Magento sınıfında çağrılan bir genel yöntemden önce ve / veya sonra atlayabildikleri halde gözlemcilerin etkinliklere abone olduğunu anlıyorum , ancak şimdi kesinlikle geçiş yollarına çok yaklaşıyorlar?


gözlemci çok sınırlı olacak, ancak eklenti tüm kamu fonksiyonlarındaki değişiklikleri yapacak
Pradeep Kumar

Yanıtlar:


42

Eklentiler, sistemdeki herhangi bir genel yöntemin davranışını değiştirmek / değiştirmekle mümkün olduğundan, her yerde hazırdır. Özelleştirmeler, @apimümkün olduğunda ek açıklama (sabit genel API) ile işaretlenmiş genel yöntemler / sınıflar için eklentiler kullanılarak yapılmalıdır . Bu yaklaşım, yeni Magento sürümlerinden sonra kişiselleştirmenin işlevsel kalmasını garanti eder. Soruda belirtilen before/ aftereklentilere ek olarak , aroundorijinal davranışın yerine geçen eklentiler oluşturmak da mümkündür .

Öte yandan, gözlemciler Magento 1'den devralınan eski uzatma mekanizmalarıdır, oldukça sınırlıdır ve mümkünse kaçınılması gerekir. Bununla birlikte, eklentilerin aksine, korumalı / özel yöntemlerin içinde uzatma noktaları sağlayabilirler.


Ayrıca eklentilere / gözlemcilere yönelik tercihler hakkında konuşurken cevaba bakınız: magento.stackexchange.com/a/94035/697 , faydalı olabilir.
Alex Paliarush

@alex: - korumalı fonksiyon için nasıl eklenti yazılır, çoğu durumda korumalı fonksiyonu geçersiz kılmamız gerekir. magento.stackexchange.com/questions/91353/…
Pradeep Kumar

@PradeepKumar eklentileri yalnızca genel yöntemlere eklenebilir. Bahsettiğiniz sorunun bir yanıtı var, ancak önerilen çözüm engellendi ancak bilinen sorun (eklentiler sanal türlere uygulanamıyor). Geçici bir geçici çözüm olarak, çerçeve URL sınıfı için eklenti beyan edebilir ve argümanlara dayanan koşullu mantık ekleyebilir (böylece eklenti sadece sizin için bir şey yapar)
Alex Paliarush

Jut'a bir örnek verdim, bu durumda korumalı bir sürü fonksiyon var, nasıl geçersiz kılınır, herhangi bir şekilde korumalı fonksiyonu geçersiz
kıldım

@PradeepKumar Korumalı bir yöntemi geçersiz kılmanız gerekirse, sınıfı genişletmeniz ve tercih / yeniden yazma özelliğini kullanmanız gerekebilir. Her neyse, bu yorumlar yerine bununla ilgili bir soru sormanızı önerin
Robbie Averill

1

Magento teknik rehberine göre ( https://devdocs.magento.com/guides/v2.1/coding-standards/technical-guidelines.html#14-events ): Bir olaya iletilen tüm değerler (nesneler dahil) OLMAMALIDIR olay gözlemcisinde değiştirilmiş. Bunun yerine, eklentiler, bir fonksiyonun girişini veya çıkışını değiştirmek için kullanılmalıdır.

Benim için eklentiler ve gözlemciler arasındaki temel fark:

  1. Eklentiler yalnızca genel yöntemleri değiştirebilirken, gözlemciler de korunaklı, özel, değiştirebilir.
  2. Eklentiler için sıralama düzeni var ancak gözlemciler için sıralama düzeni yok.
  3. Gözlemci'yi yalnızca Magento'da zaten gönderilen olaylara ekleyebilirsiniz. Eklentiler burada daha esnektir.

Ayrıca bir siparişi doğru bir gözlemci ile de güncelleyebilir miyim?
Robbie Averill

@RobbieAverill evet, checkout_submit_all_afteretkinlik için bir gözlemci oluşturabilirsiniz . Siparişiniz başarıyla verildikten sonra gözlemciniz tetiklenecektir.
transversus,

Bu, “verileri değiştirmez” anlamına mı geliyor?
Robbie Averill

1
Evet haklısınız @RobbieAverill Hem eklentiler hem de gözlemciler verileri değiştirebilir. Benim için, eklentiler ve gözlemciler arasındaki temel fark şudur: 1. Eklentiler yalnızca kamu yöntemlerini değiştirebilirken, gözlemciler de korunan özel, korumalı olanları değiştirebilir. 2. Eklentiler için sıralama düzeni var ancak gözlemciler için sıralama düzeni yok. 3. Gözlemci'yi yalnızca Magento'da gönderilen etkinliklere ekleyebilirsiniz. Eklentiler burada daha esnektir.
transversus,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.