/
Plugin/Rewrite (5h)

Plugin/Rewrite (5h)

Định nghĩa

Plugin hoặc Interceptor là một class mà thay đổi hành vi của một public function bằng cách chặn khi function được gọi. Điều này cho phép bạn thay thế hoặc mở rộng hành vi cho các function của bất kì class hoặc interface nào.

Phương pháp chặn này làm giảm xung đột giữa các extension. Dùng Plugin thay đổi hành vi của một function trong một class, nhưng nó không thay đổi chính bản thân class đó. Bởi vì chúng có thể được gọi là tuần tự theo một thứ tự sắp xếp, các plugin sẽ không bị xung đột với nhau.

Hạn chế

Plugins không thể được sử dụng trong các trường hợp sau đây:

– Đối tượng được khởi tạo trước Magento\Framework\Interception

– Final methods

– Final classes

– Bất kì class nào có chứa ít nhất một final public method.

– Method không phải public

– Class methods (ví dụ static methods)

__construct

– Virtual types

Cách khai báo một Plugin Một plugin cho một class sẽ được khai báo trong file di.xml :

<?xml version="1.0"?> <config> <type name="{ObservedType}"> <plugin name="{pluginName}" type="{PluginClassName}" sortOrder="1" disabled="false" /> </type> </config>

Bạn phải xác định các thành phần sau:

  • type: Một class hoặc interface mà các plugin quan sát.

  • Tên plugin: Tên cho plugin dùng để nhận dạng. Cũng được sử dụng để hợp nhất các file configuration cho các plugin.

  • Loại plugin. Tên class của một plugin hoặc virtual type của nó. Sử dụng quy ước đặt tên sau khi bạn xác định yếu tố này: \Vendor\Module\Plugin\Plugin.

Các thành phần sau đây là tùy chọn:

  • sortOrder: Thứ tự các plugin

  • Disabled: Dùng để disable plugin. Giá trị mặc định là false

Định nghĩa một plugin

Một plugin được sử dụng để mở rộng hoặc thay đổi hành vi của một function nào bằng cách áp dụng mã trước (before), sau (after) hoặc xung quanh (around):

Đối số đầu tiên của plugin là một đối tượng cung cấp quyền truy cập vào tất cả các public function của class mà plugin quan sát.

Before methods

Bạn có thể sử dụng "Before" để thay đổi các tham số của một function được quan sát bằng cách trả lại một đối số đã được sửa đổi. Nếu có nhiều tham số, phương pháp này sẽ trả về một mảng các đối số. Return null sẽ chỉ ra rằng các đối số cho phương pháp quan sát không được sửa đổi.

Phải có tiền tố "before".

<?php namespace My\Module\Plugin; class ProductPlugin { public function beforeSetName(\Magento\Catalog\Model\Product $subject, $name) { return ['(' . $name . ')']; } }

After methods

Những phương pháp này có thể được sử dụng để sửa đổi các kết quả của một function được quan sát và bắt buộc phải có một giá trị trả về.

Phải có tiền tố "after"

<?php namespace My\Module\Plugin; class ProductPlugin { public function afterGetName(\Magento\Catalog\Model\Product $subject, $result) { return '|' . $result . '|'; } }

Around methods

Around methods được định nghĩa là code có thể chạy cả trước và cả sau của function được quan sát. Điều này cho phép bạn ghi đè hoàn toàn lên fuction đó.

Phải có tiền tố là "around"

 

  • Rewrite:

Rewrite is the technical to instead of call the class A, we call the class B. So we can change all the function in the class A by modify the class B

  • Change the etc/di.xml

     

    • For: The class which you want to rewrite

    • Type: The class to modify the login

  • Change the logic, function in TestProduct Class (you should extends the original class to optimize the source code, and change only the logic which you want)

  • Rewrite should be used if you can not use plugin (like protected, private function) etc…

 

  • Ex1: Change all the Product Image in checkout page to Magestore Logo

  • Ex2: Always Auto redirect to Checkout page when add product to cart use PLugin/rewrite

Related content

Admin Customize: Menu/System/ Grid/Form/UiComponent (2d)
Admin Customize: Menu/System/ Grid/Form/UiComponent (2d)
Read with this
Rewrite Class (4h)
Rewrite Class (4h)
More like this
Controller (5h)
Controller (5h)
Read with this
Plugin Mechanism (4h)
Plugin Mechanism (4h)
More like this
Magento 2 Document
Magento 2 Document
Read with this
Mixin Mechanism (4h)
Mixin Mechanism (4h)
More like this