0

I created an observer for changing the shipping method amount but it does not work. This is my code

Cop/Postexpres/etc/events.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_shipment_save_after">
    <observer name="popopp" instance="Cop\Postexpres\Model\Observer"  />
</event>

and

Cop/Postexpres/Model/Observer.php

 namespace Cop\Postexpres\Observer;
      use Magento\Framework\Event\ObserverInterface;

class Observer implements ObserverInterface
{
    public function execute(\Magento\Framework\Event\Observer $observer)
    {
        $shipment = $observer->getEvent()->getShipment();
        $order = $shipment->getOrder();
       var_dump($order->getData());

    }

}
Mohit Kumar Arora
  • 9,951
  • 7
  • 27
  • 55
gh darvishani
  • 855
  • 1
  • 9
  • 37

3 Answers3

2

Try following code:

  1. app/code/[VendorName]/[ModuleName]/etc/adminhtml/events.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_shipment_save_after">
        <observer name="sales_order_shipment_save_after" instance="
            [VendorName]\[ModuleName]\Observer\ProcessShipment" />
    </event>
</config>
  1. app/code/[VendorName]/[ModuleName]/Observer/ProcessShipment.php
<?php
namespace [VendorName]\[ModuleName]\Observer;

use Magento\Framework\Event\ObserverInterface;

class ProcessShipment implements ObserverInterface
{
    public function execute(\Magento\Framework\Event\Observer $observer)
    {
        $shipment = $observer->getEvent()->getShipment();
        $order = $shipment->getOrder();
    }
}
Manish Chaubey
  • 513
  • 2
  • 8
Pratik Oza
  • 3,972
  • 11
  • 17
1

It looks like you passed wrong instance in your events.xml. You passed

<observer name="popopp" instance="Cop\Postexpres\Model\Observer"  />

and your namespace Observer is

namespace Cop\Postexpres\Observer;

So, you just need to add correct namespace(you are missing Model in your namespace).

Keyur Shah
  • 18,046
  • 6
  • 66
  • 80
1

Your namespace is incorrect. In your observer class, namespace should be

Cop\Postexpres\Model\Observer

instead of

Cop\Postexpres\Observer

Rest everything is fine!