php - Magento 2:sales_order_save_after
问题描述
当触发事件 sales_order_save_after 时,不会插入新的数量值:
Autosynch\Sale\etc\event.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_save_after">
<observer name="autosynch_sales_order_save_after" instance="Autosynch\Sale\Observer\OrderPlaceAfter" />
</event>
</config>
Autosynch\Sale\etc\module.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="Autosynch_Sale" setup_version="0.0.1">
</module>
</config>
自动同步\销售\registration.php
<?php /**
* Copyright © 2016 Magento. All rights reserved. * See COPYING.txt for license details.
*/
use Magento\Framework\Component\ComponentRegistrar;
ComponentRegistrar::register(ComponentRegistrar::MODULE, 'Autosynch_sale', __DIR__);
Autosynch\Sale\Observer\OrderPlaceAfter.php
<?php
namespace Autosynch\Sale\Observer;
use Magento\Framework\Event\ObserverInterface;
class Observer implements ObserverInterface {
protected $connector; public function __construct() {
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
}
public function execute(\Magento\Framework\Event\Observer $observer) {
$order = $observer->getEvent()->getOrder();
$customerId = $order->getCustomerId();
$order_status = $order->getStatus();
if($customerId){ // Order Criada
define("getHost", "100.100.100.100");
define("getUser", "username");
define("getPassword", "password");
define("getDB", "dbname");
$mysqli = new mysqli(getHost, getUser, getPassword, getDB);
$mysqli->select_db("dbname");
if($order_status == 'processing'){
mysqli_query($mysqli, "INSERT INTO `test` (`id`, `test`) VALUES (NULL, '1')") or die(mysqli_error($mysqli));
} else{
mysqli_query($mysqli, "INSERT INTO `test` (`id`, `test`) VALUES (NULL, '2')") or die(mysqli_error($mysqli));
}
} else{
mysqli_query($mysqli, "INSERT INTO `test` (`id`, `test`) VALUES (NULL, '3')") or die(mysqli_error($mysqli));
}
}
}
解决方案
此代码是否引发任何错误?如果有,你提供吗?此外,由于您使用的是 magento,因此最好使用它自己的 ORM 而不是原始查询。在您的模块中,您可以在 magento 应用程序数据库和模型中创建表以访问这些表。这是最好的方法!
推荐阅读
- r - 如何在 R 中绘制正向/反向传播权重的轨迹图
- node.js - Webpack:将 webpack.config.js 移动到文件夹会破坏 webpack
- r - 使用 tidymodels 的 SMOTE 和虚拟变量作为分类变量
- python - 无法识别的 PYODBC 编程错误消息
- react-native - React Native Sound 错误:RNSound.play 的参数 1 (RCTResponseSenderBlock) 不能为空
- java - 如何在java中将十六进制字符串转换为公钥?(java.security.InvalidKeyException)
- python - 无法为 Selenium 运行 Django 单元测试
- gtk3 - Gobject 的函数 G_TYPE_INSTANCE_GET_PRIVATE 已弃用
- r - 如何将第二个数据框中的一列的值附加到第一个数据框中的列,并在 R 中匹配列名?
- r - 如何在 R 中创建一个“for 循环”,它可以从 URL 列表中的每个 URL 中抓取数据?