Примените пользовательское промо-правило с помощью обозревателя в Magento 2

Я создал новую таблицу в Magento 2 для хранения пользовательских промоулеров, теперь я создал наблюдатель для события controller_action_predispatch_checkout_cart_couponPost и внутри этого наблюдателя я хочу проверить, ввел ли пользователь какое-либо пользовательское правило, а затем применить скидку в соответствии с этим правилом.

Ниже мой код:

<?php
namespace Webkul\Grid\Observer;

use Magento\Framework\Event\ObserverInterface;

class coupenAppliedAfter implements ObserverInterface
{
/**
* @var ObjectManagerInterface
*/
protected $_objectManager;

/**
* @param \Magento\Framework\ObjectManagerInterface $objectManager
*/
public function __construct(
\Magento\Framework\ObjectManagerInterface $objectManager
) {
$this->_objectManager = $objectManager;
}

/**
* customer register event handler
*
* @param \Magento\Framework\Event\Observer $observer
* @return void
*/
public function execute(\Magento\Framework\Event\Observer $observer)
{
// get enetered coupen code
$controller = $observer->getControllerAction();
$couponCode = $controller->getRequest()->getParam('coupon_code');

$objectManager =   \Magento\Framework\App\ObjectManager::getInstance();
$connection = $objectManager->get('Magento\Framework\App\ResourceConnection')->getConnection('\Magento\Framework\App\ResourceConnection::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

Пожалуйста, предложите решение для этого.

7

Решение

$ результат равен нулю. Вы пытаетесь запустить эту функцию вручную? Если это так, то это может быть вашей проблемой, так как $ наблюдатель будет пустым или нулевым.

Я бы также переместил инициализацию $ result выше оператора foreach.

0

Другие решения

Других решений пока нет …