Vì vậy, Magento cung cấp 2 cách tuyên bố một người quan sát. Singleton và Model (ví dụ mới) bằng cách chỉ định <type>thẻ trong Magento 1.x và bằng cách chỉ định sharedthuộc tính trong Magento 2.
Magento 1 cách làm.
<events>
<event_name>
<observers>
<unique_observer_name>
<type>model|object|singleton|null</type>
<class>class/alias_here</class>
<method>methdNameHere</method>
</unique_observer_name>
</observers>
</event_name>
</events>
Phiên bản Magento 2:
<event name="event_name">
<observer name="unique_observer_name" instance="Class\Name\Here" method="methodNameHere" shared="true|false" />
</event>
Vì vậy, trong trường hợp của Magento 1, nếu <type>thẻ là mô hình hoặc đối tượng, lớp sẽ được khởi tạo với Mage::getModel(). Nếu nó singletonthiếu hoặc nó bị thiếu ngay lập tức Mage::getSingleton().
Trong trường hợp của Magento 2, nếu sharedlà falsethì lớp được khởi tạo bằng cách sử dụng $this->_observerFactory->create() (ví dụ mới).
nếu sharedđúng thì nó được khởi tạo bằng cách sử dụng $this->_observerFactory->get()(singleton).
Giữa hai phiên bản, ý tưởng của người quan sát sự kiện rất giống nhau, nhưng hầu hết những người quan sát trong Magento 1 đều được sử dụng như những người độc thân, vì typethẻ bị thiếu và trong Magento 2 hầu hết (tôi nghĩ tất cả) những người quan sát đều có shared="false".
Tôi hoang mang. Khi nào tôi nên sử dụng singletons và khi nào tôi nên sử dụng phiên bản mới cho người quan sát?
Phiên bản Magento (1 hoặc 2) không quan trọng ở đây.
Một trường hợp sử dụng đơn giản sẽ làm cho mỗi cách tiếp cận (ví dụ mới hoặc singleton)
typethẻ là điều tương tự như <type>singleton</type>. Vì vậy, lý do chúng ta đang làm cho các nhà quan sát singletons là gì?
typethuộc tính, vì vậy mà tôi thường bỏ qua nó ngay bây giờ.