At first, question, you want to trigger Module A
module observer then fire observer of Module B
.
Then below is my solution is of this case.
Disable Module B
using xml code.
Then Create around plugin the method ModuleA_ObserverClass::execute(\Magento\Framework\Event\Observer $observer)
of Observer of module A
.
And on that around Plugin PluginClass::aroundExecute()
execute original ModuleA_ObserverClass::execute(\Magento\Framework\Event\Observer $observer)
and
using $proceed(\ModuleA_ObserverClass $subject,\Callable ,$observer)
And after running of origina method , add new method to PluginClass
.
And on this new method, copy all code of ModuleB: execute
and run after $proceed($observer)
.
Step1: Disable Observer of Module B
<event name="checkout_submit_all_after">
<observer name="{ModuleB_Observer_Classs}" instance="{observerClassNameOfModuleB}" />
</event>
Assume above one is observer declaration of ModuleB. First, we have to disable this observer.
Let's create An events.xml
at your custom module and disable this by XML node disabled
.
<?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="checkout_submit_all_after">
<!-- Note that observer name should be same of Module B observer -->
<observer name="{ModuleB_Observer_Classs}" disabled="true" />
</event>
</config>
Step2: Create around plugin on ModuleA_ObserverClass::execute()
Create di.xml and declare the around plugin for ModuleA_ObserverClass::execute(\Magento\Framework\Event\Observer $observer)
.
<?xml version="1.0" ?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<type name="ModuleA_ObserverClass">
<plugin name="ModuleA_ObserverClass_My_plugin" sortOrder="10" type="{PluginClass}"/>
</type>
</config>
And Plugin code:
<?php
namespace {Namespace};
class {PluginClass} {
public function aroundExecute(
\ModuleA_Observer_Classs $subject,
callable $proceed,
\Magento\Framework\Event\Observer $observer
){
//This code run original Merthod
$proceed($observer);
$this->replicatedMethodExecuteofObseverOfModuleB($observer);
}
public function replicatedMethodExecuteofObseverOfModuleB($observer)
{
// Copy all code of `ModuleA_ObserverClass::execute(\Magento\Framework\Event\Observer $observer)`
// and paste here
}
}