2017-09-14 67 views
7

我已經在Magento 2中創建新表,用於存儲自定義promorules,我現在已經創建了觀察員事件controller_action_predispatch_checkout_cart_couponPost和觀察者我要檢查,如果用戶輸入任何自定義規則,然後裏面根據該規則應用折扣。使用觀測應用定製的促銷規則在Magento 2

下面是我的代碼:

<?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

請建議此解決方案。

+0

什麼的var_dump($結果)產生? – TheRealJAG

回答

0

$結果爲空。你是否試圖手動運行這個功能?如果你是,那可能是你的問題,因爲$ observer將是空的或空的。

我還要動的$初始化導致foreach語句以上。