我已经在Magento 2中创建了新表格,用于存储自定义提议,现在我为事件controller_action_predispatch_checkout_cart_couponPost
创建了观察者,在该观察者内部,我想检查用户是否已输入任何自定义规则,然后应用根据该规则的折扣。
以下是我的代码:
<?php
namespace WebkulGridObserver;
use MagentoFrameworkEventObserverInterface;
class coupenAppliedAfter implements ObserverInterface
{
/**
* @var ObjectManagerInterface
*/
protected $_objectManager;
/**
* @param MagentoFrameworkObjectManagerInterface $objectManager
*/
public function __construct(
MagentoFrameworkObjectManagerInterface $objectManager
) {
$this->_objectManager = $objectManager;
}
/**
* customer register event handler
*
* @param MagentoFrameworkEventObserver $observer
* @return void
*/
public function execute(MagentoFrameworkEventObserver $observer)
{
// get enetered coupen code
$controller = $observer->getControllerAction();
$couponCode = $controller->getRequest()->getParam('coupon_code');
$objectManager = MagentoFrameworkAppObjectManager::getInstance();
$connection = $objectManager->get('MagentoFrameworkAppResourceConnection')->getConnection('MagentoFrameworkAppResourceConnection::DEFAULT_CONNECTION');
// get list of coupon codes from that custom table
$all_custom_codes = $connection->fetchAll("SELECT * FROM custom_promotion_rules");
foreach($all_custom_codes as $code) {
$db_coupen_code = $code['code'];
// matching if user has entered any custom code
if($couponCode == $db_coupen_code) {
// if yes trying to apply custom discount
$DiscountAmount = $code['discount_amount'];
$result = $observer->getEvent()->getResult();
$result->setAmount($DiscountAmount);
$result->setBaseAmount($DiscountAmount);
}
}
}
}
,但以上代码不起作用,并且给出错误 Fatal error: Uncaught Error: Call to a member function setAmount() on null
请为此建议解决方案。
$结果为null。您是否要手动运行此功能?如果是,那可能是您的问题,因为$ observer将是空的或空的。
我还将在foreach语句上方移动$结果的初始化。