Magentos Observers

Observers的工作方式

Observers用于捕捉事件之前或之后触发的操作。在观测者中,您可以设置响应时执行的所需功能或逻辑。
Magento 2 Observers可以通过将类文件放在Module Root/Observer目录下创建。Observers类应该实现以下内容:
Magento\Framework\Event\ObserverInterface并定义其执行功能。

如何使用Observers

确保您之前已经注册了新模块进行测试,我们将在此模块上进行练习。
我将使用我的模块SampleEvent。然后,我将使用Observers在产品视图页面上自定义产品名称。

创建Magento 2 Event:

-第一步,我们需要为Magento 2创建一个Event。要创建并添加一个新的Event文件。app/code/Magenest/SampleEvent/etc中的xml并添加一些代码:

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
   <event name="catalog_controller_product_view">
       <observer name="vendor_resgister_observer" instance="Magenest\SampleEvent\Observer\ProductEvents" />
   </event>
</config>

上面的XML代码正在侦听catalog_controller_product_view事件。您需要记住名称和实例属性位于<observer>元素中。name属性定义了每个事件必须唯一的Observer name,而instance属性定义了在调度catalog_controller_product_view事件时需要执行的特定Magento 2类。

创建Magento 2 Observers

-现在要创建Magento 2 Observers,我们可以添加一个新文件ProductEvents。App\Code\Magenest\SampleEvent\Observer中的php,并将此代码添加到其中:

<?php
namespace Magenest\SampleEvent\Observer;
use Magento\Framework\Event\Observer;
use Magento\Framework\Event\ObserverInterface;
class ProductEvents implements ObserverInterface
{
   /**
    * Below is the method that will fire whenever the event runs!
    *
    * @param Observer $observer
    */
   public function execute(Observer $observer)
   {
       $product = $observer->getProduct();
       $originalName = $product->getName();
       $modifiedName = $originalName . ' - Content added by Magenest ';
       $product->setName($modifiedName);
   }
}
image.png

使用观察者Magento 2时的一些做法:

-让你的观察者更有效率:如果可以的话,你应该尽量避免复杂的计算,以保持观察者的小型和高效。因为在观察者中进行复杂的计算会减慢应用程序的进程。

-不要包含业务逻辑:除了运行所需的逻辑之外,观察者不应该包含其他逻辑。业务逻辑应该封装在观察者使用的其他类中。

-在适当范围内宣布观察员:

+对于前端事件,在etc/frontend/events中声明观察者。xml,此事件将仅在前端使用。您不能在后端使用此事件。

+对于后端事件,请在etc/adminhtml/events中声明观察者。xml,此事件将仅在后端使用。此事件不能在前端使用。

+使用全局etc/events。只有在前端和后端都可能发生事件时,才可以使用xml文件。

+您可以放置事件。etc>webapirest>events中的xml。xml,同时处理Rest API请求。

+您可以放置事件。etc>webapisoap>events中的xml。xml,同时处理Soap API请求。

+您可以放置事件。etc>crontab>events中的xml。xml,而仅处理计划作业。

+您可以放置事件。etc>setup>events中的xml。在安装或升级Magento或扩展的过程中。

自定义Observers

步骤1:调度事件

创建一个文件:app/code/Magenest/SampleEvent/Controller/Index/TestEvent。php并添加以下代码:

<?php
namespace Magenest\SampleEvent\Controller\Index;
class TestEvent extends \Magento\Framework\App\Action\Action
{
    public function execute()
    {
        $textDisplay = new \Magento\Framework\DataObject(array('text' => 'Magenest'));
        $this->_eventManager->dispatch(magenest_display_text, ['mp_text' => $textDisplay]);
        echo $textDisplay->getText();
        exit;
    }
}

步骤2:events.xml

-在这一步中,我们只捕获事件以在前端显示单词Magenest,因此我们应该创建一个事件。etc/frontend文件夹中的xml文件。

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
    <event name="magenest_display_text">
        <observer name="display_text" instance="Magenest\SampleEvent\Observer\DisplayText" />
    </event>
</config>

步骤3:创建观察者

现在我们将创建一个类来执行上述事件。
文件:app/code/Magenest/SampleEvent/Observer/DisplayText.php

<?php
namespace Magenest\SampleEvent\Observer;
class DisplayText implements \Magento\Framework\Event\ObserverInterface
{
    public function execute(\Magento\Framework\Event\Observer $observer)
    {
        $displayText = $observer->getData('mp_text');
        echo $displayText->getText() . " - Some content </br>";
        $displayText->setText('Execute event successfully.');

        return $this;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容