Việc đánh chặn trong magento2 có thay thế người quan sát trong magento1 không?


9

Có phải việc đánh chặn dự định là phương pháp ưa thích khi xử lý thay đổi hành vi của một phương thức ban đầu trong Magento2 vì các nhà quan sát đã ở trong magento1?

https://wiki.magento.com/display/MAGE2DOC/Using+Interception

Câu trả lời:


16

Tôi không nghĩ rằng việc đánh chặn là nhằm thay thế các nhà quan sát sự kiện.
Vẫn có những sự kiện được gửi trong mã Magento2.

Các bộ chặn chỉ là một cách để xử lý đầu vào hoặc đầu ra của một phương thức.
Hoặc hành vi của một phương thức (sử dụng thiết aroundbị chặn) nhưng từ những gì tôi hiểu thì đây là một cách tiếp cận rủi ro.

Tôi nghĩ rằng đó là một cách để tránh lớp viết lại càng nhiều càng tốt.
Trong Magento 1.x, nếu bạn cần sửa đổi kết quả của một phương thức bạn cần để ghi đè lớp chứa và chính phương thức đó.
bây giờ bạn có thể dễ dàng sử dụng before, afterhoặc aroundchặn để thao tác dữ liệu.

Với người quan sát, bạn có thể thao tác dữ liệu theo một số điểm cố định của một phương thức, chứ không phải chính phương thức đầy đủ.

Theo tôi, sử dụng người quan sát khi có thể vẫn là cách tiếp cận tốt nhất để tùy chỉnh ngay cả trong Magento 2.


2
Đồng ý. Đánh chặn là cơ chế cấp thấp hơn. Nhưng nó không thay thế các sự kiện. Sự kiện cung cấp giao diện nhà cung cấp dịch vụ cấp cao hơn
Anton Kril

6

Đánh chặn là sự tiến hóa của các sự kiện. Mục tiêu của nó là cho phép một nhà phát triển viết mã của mình mà không cần suy nghĩ về các điểm mở rộng.

Với các sự kiện bạn phải suy nghĩ về những nơi bạn thực hiện Mage :: ClarkEvent () để mô-đun của bạn có thể được tùy chỉnh.

Đánh chặn cho phép bạn không nghĩ về điều này. Bạn chỉ cần viết logic kinh doanh của bạn. Mỗi cuộc gọi phương thức là một sự kiện. Vì vậy, nếu bạn viết mã theo cách hướng đối tượng phù hợp, nó sẽ hoàn toàn có thể tùy chỉnh theo thiết kế.

Nhưng các sự kiện cung cấp Giao diện Cung cấp Dịch vụ cấp cao hơn nói về ngôn ngữ kinh doanh. Vì vậy, các sự kiện sẽ ở lại trong Magento 2.


Bạn có thể vui lòng lấy sự thật quan trọng này trong devdocs vì đây là một nguồn gây nhầm lẫn, đặc biệt là khi bạn vẫn còn nhiều sự kiện trong M2. Nếu chúng ta biết các sự kiện đã chết, chúng ta có thể viết mã theo đó, tôi đã không thấy bất cứ nơi nào đề cập đến điều này trong các tài liệu. Trong các ngôn ngữ khác đôi khi có lý do để sử dụng các sự kiện và đánh chặn các lần khác, tôi nghĩ bạn cần làm rõ rằng Magento 2 là khác nhau.
Karen Baker

5

Hiện tại vẫn còn tùy chọn để nghe các sự kiện cụ thể và tôi sẽ đề nghị rằng các thiết bị chặn chỉ là một sự thay thế cho việc viết lại. Tôi vẫn sẽ sử dụng các sự kiện khi có một sự kiện phù hợp với nhu cầu của bạn.

Nếu bạn nhìn vào bản phát hành hiện tại, một số mô-đun có events.xmlcác tệp bao gồm các định nghĩa.

<event name="cms_wysiwyg_images_static_urls_allowed">
    <observer name="catalog_wysiwyg" instance="Magento\Catalog\Model\Observer"  />
</event>

Trong mẫu quan sát phiên bản mới nhất của Magento-2 đã được thay đổi. Bây giờ bạn không cần khai báo thuộc tính phương thức trong event.xml ,, Nó sẽ tự động chạy phương thức thực thi ,, giống như trình điều khiển.
Keyur Shah
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.