we have to declare event that we will catch in file di.xml and a function on Observer file.
Example: echo module name, controller name, action name of the current module.
Event used: controller_action_predispatch
1. Declare Event in events.xml (frontend)
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../lib/internal/Magento/Framework/Event/etc/events.xsd">
<event name="controller_action_predispatch">
<observer name="magenhub_event" instance="Magenhub\Chris\Model\Observer" method="printInfo" shared="false" />
</event>
</config>
This code will be write in module: Magenhub_Chris, model Observer.
2. Write file Observer.php
Write function printInfo to print module name, controller name, action name of the current url.
File: app/code/Magenhub/Chris/Model/Observer.php
<?php
namespace Magenhub\Chris\Model;
class Observer {
public function printInfo(\Magento\Framework\Event\Observer $observer) {
$request = $observer->getEvent()->getData('request');
echo $request->getModuleName('catalog').'<br/>';
echo $request->getControllerName('product').'<br/>';
echo $request->getActionName('view').'<br/>';
die();
}
}
This code only print module name, controller name and action name to browser.
- Result for home page:
cms
index
index
- Result for product view page:
catalog
product
view