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
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.1
Sự kiện
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.
Để 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
1
Abc/Hello/etc/frontend/events.xml
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
, với các nội dung sau đây1
etc/frontend/events.xml
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
và viết mã1
Abc\Hello\Observer\Predispatch.php
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
, 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
'controller_action_predispatch'
trong 1
'Observer Works'
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
, chúng tôi tìm thấy những sự kiện liên quan1
Magento\Customer\Model\Customer
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
của chúng tôi1
events.xml
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
với mã1
Abc\Hello\Observer\Customer\Authenticated.php
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ó