【问题标题】:Magento 2 - Observer on event 'sales_order_place_after' not workingMagento 2 - 事件'sales_order_place_after'的观察者不起作用
【发布时间】:2019-12-21 04:21:42
【问题描述】:

我正在研究一个 magento 2 观察者(没有成功),以便在下订单后对具有 orderid 的系统执行 cURL 请求。

目前我只是发送一封电子邮件,但这仅用于测试目的

在安装了全新 Magento 2.3.2(无示例数据)并添加 1 个产品的 Plesk 服务器上工作。所以,新鲜的网店总共有 1 件产品。

目前我有以下代码:

/app/code/CompanyName/ModuleName/etc/events.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="sales_order_place_after">
        <observer name="companyname__modulename_observer_afterplaceorder" instance="CompanyName\ModuleName\AfterPlaceOrder"  />
    </event>

<config>

/app/code/CompanyName/ModuleName/AfterPlaceOrder.php

<?php
namespace CompanyName\ModuleName\Observer;

use Magento\Framework\Event\ObserverInterface;
use Psr\Log\LoggerInterface;

class AfterPlaceOrder implements ObserverInterface {

    protected $logger;

    public function __construct(LoggerInterface $logger) {
        $this->logger = $logger;
    }

    public function execute(\Magento\Framework\Event\Observer $observer) {
        Mage::log("Start execute module");


        $headers   = array();
        $headers[] = "MIME-Version: 1.0";
        $headers[] = "Content-type: text/html";
        $headers[] = "From: Test SYSTEM";
        $headers[] = "X-Mailer: PHP/".phpversion();
        mail('testemail@companyname.com', 'Test message', "Order placed", implode("\r\n", $headers));

        Mage::log("End of email");
    }


}

我还尝试过其他活动,例如:
- checkout_onepage_controller_success_action
- sales_order_place_after
- sales_order_place_before
- sales_order_save_after

日志似乎不起作用,邮件没有发送并尝试 die() 但没有任何效果。

可能该事件从未被触发,但我就是不知道为什么。

你们能看到错误吗?

附:你用什么调试?有没有比记录更好的方法? 附言如果观察者是最好的方法,我现在也想这样做。有什么建议吗?

提前谢谢!

【问题讨论】:

    标签: events magento2 observers


    【解决方案1】:

    您的 /app/code/CompanyName/ModuleName/etc/events.xml 缺少观察者文件夹以及配置标签的关闭。您可以使用该事件:

    checkout_onepage_controller_success_action

    <?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="checkout_onepage_controller_success_action">
            <observer name="companyname__modulename_observer_afterplaceorder" instance="CompanyName\ModuleName\Observer\AfterPlaceOrder"/>
        </event>
    </config>
    

    要获取 orderid,只需使用: $orderId = $observer->getEvent()->getOrderIds();

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-10
      • 2016-11-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-18
      • 2016-09-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多