Cookies setting

Cookies help us enhance your experience on our site by storing information about your preferences and interactions. You can customize your cookie settings by choosing which cookies to allow. Please note that disabling certain cookies might impact the functionality and features of our services, such as personalized content and suggestions. Cookie Policy

Cookie Policy
Essential cookies

These cookies are strictly necessary for the site to work and may not be disabled.

Information
Always enabled
Advertising cookies

Advertising cookies deliver ads relevant to your interests, limit ad frequency, and measure ad effectiveness.

Information
Analytics cookies

Analytics cookies collect information and report website usage statistics without personally identifying individual visitors to Google.

Information
mageplaza.com

A Guide on How to Create Magento 2 Events & Observers

Vinh Jacker | 12-18-2024

A Guide on How to Create Magento 2 Events & Observers

In this example we will show you How to create a event in Magento 2, we only catch the event to show the word Mageplaza - Event on the frontend so we should create an events.xml file in etc/frontend folder.

Overview of creating events in Magento 2

Understand Catching and handling a event

Magento use area definition to manage the store. We will have a frontend area and admin area. With the configuration file, they can be put in 3 places:

  • Under etc/ folder is the configuration which can be used in both admin and frontend.
  • Under etc/frontend folder will be used for frontend area.
  • Under etc/adminhtml folder will be used for admin area.

The same with the event configuration file. You can create events configuration file for each area like this:

  • Admin area: app/code/Mageplaza/HelloWorld/etc/adminhtml/events.xml
  • Frontend area: app/code/Mageplaza/HelloWorld/etc/frontend/events.xml
  • Global area: app/code/Mageplaza/HelloWorld/etc/events.xml

Step 1: Dispatch event

Now we want to dispatch an magento 2 event list which allow other module can change the word displayed. We will change the controller like this:

File: app/code/Mageplaza/HelloWorld/Controller/Index/Test.php

Content would be:

<?php

namespace Mageplaza\HelloWorld\Controller\Index;

class Test extends \Magento\Framework\App\Action\Action
{

	public function execute()
	{
		$textDisplay = new \Magento\Framework\DataObject(array('text' => 'Mageplaza'));
		$this->_eventManager->dispatch('mageplaza_helloworld_display_text', ['mp_text' => $textDisplay]);
		echo $textDisplay->getText();
		exit;
	}
}

The dispatch method will receive 2 arguments: an unique event name and an array data. In this example, we add the data object to the event and call it back to display the text.

Step 2: Create a event file: events.xml

File: app/code/Mageplaza/HelloWorld/etc/frontend/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="mageplaza_helloworld_display_text">
        <observer name="mp_display_text" instance="Mageplaza\HelloWorld\Observer\ChangeDisplayText" />
    </event>
</config>

In this file, under config element, we define an event element with the name is the event name which was dispatch above. The class which will execute this event will be define in the observer element by instance attribute. The name of observer is used to identify this with other observers of this event.

With this events.xml file, Magento will execute class Mageplaza\HelloWorld\Observer\ChangeDisplayText whenever the dispatch method of this event was called on frontend area. Please note that, we place events.xml in the frontend area, so if you dispatch that event in the admin area (like admin controller), it will not run.

Step 3: Create Observer class

Now we will create a class to execute above event.

File: app/code/Mageplaza/HelloWorld/Observer/ChangeDisplayText.php

<?php

namespace Mageplaza\HelloWorld\Observer;

class ChangeDisplayText implements \Magento\Framework\Event\ObserverInterface
{
	public function execute(\Magento\Framework\Event\Observer $observer)
	{
		$displayText = $observer->getData('mp_text');
		echo $displayText->getText() . " - Event </br>";
		$displayText->setText('Execute event successfully.');

		return $this;
	}
}

This class will implement the ObserverInterface and declare the execute method. You can see this simple method to know how it work.

Step 4: Flush cache and check the result

Let’s flush cache and see the result.

create event magento 2


Magento 2 extensions

Magento 2 extensions

Allow you to achieve more with your online store

Check it out!


Related Post

x
    Jacker

    With over a decade of experience crafting innovative tech solutions for ecommerce businesses built on Magento, Jacker is the mastermind behind our secure and well-functioned extensions. With his expertise in building user-friendly interfaces and robust back-end systems, Mageplaza was able to deliver exceptional Magento solutions and services for over 122K+ customers around the world.



    Related Post

    Website Support
    & Maintenance Services

    Make sure your store is not only in good shape but also thriving with a professional team yet at an affordable price.

    Get Started
    mageplaza services