Magento 2 - Sự kiện Event

Trong bài viết trên blog này, chúng tôi sẽ xem làm thế nào các sự kiện - Events làm việc trong magento 2

1
Sự kiện
trong Magento là một tính năng quan trọng để mở rộng chức năng cốt lõi. Hãy xem cách các sự kiện làm việc trong magento 2.

Sự kiện là gì?

Sự kiện trong Magento theo các mẫu Observer có nghĩa là, tại nhiều nơi trong các module Magento lõi sự kiện được phát ra và chúng tôi có thể viết mã trong mô-đun tùy chỉnh của chúng tôi để lắng nghe những sự kiện và thực hiện hành động.

Sự kiện luôn luôn là cách tốt nhất để thêm các tính năng trên mô-đun lõi. Lý do là họ không xung đột với các module khác, nhiều nhà quan sát sự kiện có thể được gắn liền với một sự kiện duy nhất.

Cách tạo sự kiện

Để thêm các sự kiện trước tiên chúng ta cần phải quyết định vượt một sự kiện lối vào của nó hoặc sự kiện admin. Tùy thuộc vào điều này chúng ta cần tạo một tập tin cấu hình

Sự kiện ở frontend

1
Abc/Hello/etc/frontend/events.xml

Sự kiện trong admin

1
Abc/Hello/etc/adminhtml/events.xml

bây giờ chúng ta sẽ xem xét chỉ sự kiện lối vào.

Vì vậy, trong mô-đun của chúng tôi, chúng tôi thêm file

1
etc/frontend/events.xml
, với các nội dung sau đây

1
2
3
4
5
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
    <event name="controller_action_predispatch">
        <observer name="abc_hello_test_observer" instance="Abc\Hello\Observer\Predispatch" />
    </event>
</config>

Tên sự kiện phải là duy nhất

Tiếp theo chúng ta hãy xác định các quan sát viên

1
Abc\Hello\Observer\Predispatch.php
và viết mã

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
 
 
namespace Abc\Hello\Observer;
 
use \Psr\Log\LoggerInterface;
use Magento\Framework\Event\Observer;
use Magento\Framework\Event\ObserverInterface;
 
 
class Predispatch implements ObserverInterface
{
    
    protected $logger;
 
   
    public function __construct(LoggerInterface $logger)
    {
        $this->logger = $logger;
    }
 
    public function execute(Observer $observer)
    {
        $this->logger->warn('Observer Works');
        //exit; un commet this to make sure event works
    }
}

Vì chúng ta đã sử dụng các sự kiện

1
'controller_action_predispatch'
, quan sát viên này sẽ làm việc trên mỗi trang. Nếu bạn mở bất kỳ trang lối vào, bạn sẽ thấy
1
'Observer Works'
trong
1
var/log/system.log

Chúng ta hãy xem một ví dụ khác của việc sử dụng các sự kiện đó là chút phức tạp hơn.

Để tìm sự kiện được phát ra qua magento bạn cần phải mở các tập tin cốt lõi và tìm thấy sự kiện. Hãy viết một mã để đăng nhập tên khách hàng khi ông được đăng nhập. Nhìn vào mô hình

1
Magento\Customer\Model\Customer
, chúng tôi tìm thấy những sự kiện liên quan

1
2
3
4
$this->_eventManager->dispatch(
            'customer_customer_authenticated',
            ['model' => $this, 'password' => $password]
        );

Hãy viết quan sát viên cho sự kiện này trong tập tin

1
events.xml
của chúng tôi

1
2
3
<event name="customer_customer_authenticated">
    <observer name="abc_hello_customer_customer_authenticated" instance="Abc\Hello\Observer\Customer\Authenticated" />
</event>

tiếp theo chúng ta sẽ tạo các lớp

1
Abc\Hello\Observer\Customer\Authenticated.php
với mã

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
 
 
namespace Abc\Hello\Observer\Customer;
 
use \Psr\Log\LoggerInterface;
use Magento\Framework\Event\Observer;
use Magento\Framework\Event\ObserverInterface;
 
 
class Authenticated implements ObserverInterface
{
    
    protected $logger;
 
   
    public function __construct(LoggerInterface $logger)
    {
        $this->logger = $logger;
    }
 
    public function execute(Observer $observer)
    {
        $customer = $observer->getModel();
        //print_r($customer->getData());exit;
        $this->logger->warn('Customer Logged IN:' . $customer->getFirstname());
    }
}

Trong ví dụ trên, chúng ta có thể nhìn thấy làm thế nào để lấy dữ liệu sự kiện từ $ quan sát và sử dụng nó

Comments