Magento – Magento 2: How to override event “checkout_type_onepage_save_order_after”

event-observermagento2

I want to override an event checkout_type_onepage_save_order_after.
For this I already tried below code :

etc/frontend/events.xml

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="checkout_type_onepage_save_order_after">
        <observer name="mycustomobserver" instance="Namespace\Module\Observer\CreateTestFormObserver"/>
     </event>
</config>

Namespace\Module\Observer\CreateTestFormObserver.php

<?php
namespace Namespace\Module\Observer;

use Magento\Framework\Event\ObserverInterface;
use Magento\Framework\Event\Observer as EventObserver;

class CreateTestFormObserver implements ObserverInterface
{
  private $logger;
  protected $messageManager;

   public function __construct(
     \Psr\Log\LoggerInterface $logger) {
        $this->logger = $logger;
   }
   public function execute(EventObserver $observer)
   {
       $this->logger->addDebug('CreateTestFormObserver');
   }
}

But my file is not called after placing an order. I identify this by my log, which is not generated on or after placing an order.

Best Answer

I found solution which is as below :

Change event.xml file position to etc/events.xml and code is :

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
    <event name="checkout_type_onepage_save_order_after">
       <observer name="mycustomobserver" instance="Namespace\Module\Observer\Frontend\CreateTestForm"/>
   </event>
</config>

And put folder of event at Namespace\Module\Observer\Frontend\CreateTestForm.php and now code is :

<?php
namespace Namespace\Module\Observer\Frontend;

use Magento\Framework\Event\ObserverInterface;
use Magento\Framework\Event\Observer as EventObserver;

class CreateTestForm implements ObserverInterface
{
    private $logger;
    protected $messageManager;

    public function __construct(
     \Psr\Log\LoggerInterface $logger) {
    $this->logger = $logger;
  }
  public function execute(EventObserver $observer)
  {
    $this->logger->addDebug('CreateTestFormObserver');
  }
}