2017-09-14 41 views
7

Özel promorülleri depolamak için Magento 2'de yeni bir tablo oluşturdum, şimdi controller_action_predispatch_checkout_cart_couponPost etkinliği için gözlemci oluşturdum ve bu gözlemcinin içinde kullanıcı herhangi bir özel kural girip girmediğini kontrol etmek istiyorum Bu kurala göre indirim uygulanır. Magento 2'de gözlemciyi kullanarak özel promosyon kuralı uygulayın

<?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); 
      } 
     } 

    } 
} 

ama kodunun üzerinde

çalışmıyor ve veren hata Fatal error: Uncaught Error: Call to a member function setAmount() on null

Bunun çözüm önermek edin:

Aşağıda benim kodudur.

+0

Var_dump ($ sonuç) ne üretir? – TheRealJAG

cevap

0

$ sonuç sıfırlandı. Bu işlevi manuel olarak çalıştırmaya mı çalışıyorsunuz? Eğer öyleyse, $ gözlemcinin boş ya da boş olacağından bu senin problemin olabilir.

Ayrıca, foreach ifadesinin üzerindeki $ sonuçlarının başlatılmasını da hareket ettiririm.