Magento 2 Core Events List with Examples for Developers

Magento 2 is a powerful and flexible e-commerce platform, built on a robust event-driven architecture. Events in Magento allow developers to "hook into" specific actions throughout the system without modifying core code. They are widely used to extend functionality, customize workflows, and integrate with other systems.

In this article, you will find a comprehensive table of Magento 2 core events, including the event name, the arguments available, and the file where the event is dispatched. This list focuses solely on default Magento 2 events, ensuring that it is relevant for all standard installations.

Each event can be used in various scenarios, such as:

  • Modifying product or category data before saving to the database.
  • Performing additional operations after an order is placed, invoiced, or shipped.
  • Customizing checkout processes, payment methods, or shipping calculations.
  • Tracking customer actions, such as login, logout, or newsletter subscription.
  • Extending email templates, CMS page rendering, or catalog search functionality.

After the table, practical examples are provided to demonstrate how to observe events using events.xml and implement custom observers. These examples will help developers understand how to leverage events effectively for custom business logic.

By the end of this article, developers will have a clear reference for Magento 2 core events and practical guidance on using them to create robust, maintainable customizations.

Event NameArgumentsFile
catalog_category_save_after category Magento_Catalog/Model/Category.php
catalog_category_delete_after category Magento_Catalog/Model/Category.php
catalog_product_save_after product Magento_Catalog/Model/Product.php
catalog_product_save_before product Magento_Catalog/Model/Product.php
catalog_product_delete_after product Magento_Catalog/Model/Product.php
catalog_product_collection_load_before collection Magento_Catalog/Model/ResourceModel/Product/Collection.php
catalog_product_collection_load_after collection Magento_Catalog/Model/ResourceModel/Product/Collection.php
catalog_product_compare_add_product product, request Magento_Catalog/Model/Product/Compare/ListCompare.php
catalog_product_compare_remove_product product, request Magento_Catalog/Model/Product/Compare/ListCompare.php
catalog_product_compare_clear customer, request Magento_Catalog/Model/Product/Compare/ListCompare.php
checkout_cart_product_add_after quote_item, product, request_info Magento_Checkout/Model/Cart.php
checkout_cart_save_after quote Magento_Checkout/Model/Cart.php
checkout_cart_update_items_after quote Magento_Checkout/Model/Cart.php
checkout_onepage_controller_success_action order_ids Magento_Checkout/Controller/Onepage/Success.php
checkout_onepage_controller_failure_action order_ids Magento_Checkout/Controller/Onepage/Failure.php
checkout_submit_all_after quote, order Magento_Checkout/Model/Type/Onepage.php
checkout_submit_before quote, order Magento_Checkout/Model/Type/Onepage.php
checkout_quote_collect_totals_before quote Magento_Checkout/Model/Cart.php
checkout_quote_save_after quote Magento_Checkout/Model/Cart.php
checkout_cart_remove_item_before quote_item Magento_Checkout/Model/Cart.php
checkout_cart_remove_item_after quote_item Magento_Checkout/Model/Cart.php
customer_login customer, request Magento_Customer/Model/Session.php
customer_logout customer Magento_Customer/Model/Session.php
customer_register_success customer Magento_Customer/Model/AccountManagement.php
customer_account_edit_post customer, request Magento_Customer/Controller/Account/EditPost.php
customer_save_after customer Magento_Customer/Model/Customer.php
customer_save_before customer Magento_Customer/Model/Customer.php
customer_delete_after customer Magento_Customer/Model/Customer.php
customer_delete_before customer Magento_Customer/Model/Customer.php
sales_order_place_after order Magento_Sales/Model/Order.php
sales_order_place_before order Magento_Sales/Model/Order.php
sales_order_save_after order Magento_Sales/Model/Order.php
sales_order_save_before order Magento_Sales/Model/Order.php
sales_order_invoice_pay invoice Magento_Sales/Model/Order/Invoice.php
sales_order_invoice_save_after invoice Magento_Sales/Model/Order/Invoice.php
sales_order_shipment_save_after shipment Magento_Sales/Model/Order/Shipment.php
sales_order_shipment_save_before shipment Magento_Sales/Model/Order/Shipment.php
sales_order_creditmemo_save_after creditmemo Magento_Sales/Model/Order/Creditmemo.php
sales_order_creditmemo_save_before creditmemo Magento_Sales/Model/Order/Creditmemo.php
sales_order_payment_place_start order, payment Magento_Sales/Model/Order/Payment.php
sales_order_payment_place_end order, payment Magento_Sales/Model/Order/Payment.php
sales_order_payment_pay order, payment Magento_Sales/Model/Order/Payment.php
sales_quote_save_after quote Magento_Quote/Model/Quote.php
sales_quote_item_save_after quote_item Magento_Quote/Model/Quote/Item.php
sales_quote_collect_totals_before quote Magento_Quote/Model/Quote.php
sales_quote_collect_totals_after quote Magento_Quote/Model/Quote.php
sales_quote_item_qty_set_after quote_item Magento_Quote/Model/Quote/Item.php
sales_quote_remove_item quote, quote_item Magento_Quote/Model/Quote.php
payment_method_is_active result, method_instance, quote Magento_Payment/Model/Method/AbstractMethod.php
payment_method_assign_data_before method_instance, data Magento_Payment/Model/Method/AbstractMethod.php
payment_method_assign_data_after method_instance, data Magento_Payment/Model/Method/AbstractMethod.php
newsletter_subscriber_save_after subscriber Magento_Newsletter/Model/Subscriber.php
newsletter_subscriber_save_before subscriber Magento_Newsletter/Model/Subscriber.php
newsletter_subscriber_delete_after subscriber Magento_Newsletter/Model/Subscriber.php
newsletter_subscriber_delete_before subscriber Magento_Newsletter/Model/Subscriber.php
email_template_send_before email, template Magento_Email/Model/Template.php
email_template_send_after email, template Magento_Email/Model/Template.php
email_template_send_error email, template Magento_Email/Model/Template.php
cms_page_render page, transport Magento_Cms/Model/Page.php
cms_page_render_before page, transport Magento_Cms/Model/Page.php
cms_page_render_after page, transport Magento_Cms/Model/Page.php
cms_page_save_after page Magento_Cms/Model/Page.php
cms_page_save_before page Magento_Cms/Model/Page.php
cms_page_delete_after page Magento_Cms/Model/Page.php
cms_page_delete_before page Magento_Cms/Model/Page.php
controller_action_predispatch request, controller_action Magento\Framework\App\Action\Action.php
controller_action_postdispatch request, controller_action Magento\Framework\App\Action\Action.php
core_block_abstract_to_html_before block Magento\Framework\View\Element\AbstractBlock.php
core_block_abstract_to_html_after block, transport Magento\Framework\View\Element\AbstractBlock.php
layout_generate_blocks_before layout Magento\Framework\View\Layout.php
layout_generate_blocks_after layout Magento\Framework\View\Layout.php
layout_render_before layout Magento\Framework\View\Layout.php
layout_render_after layout Magento\Framework\View\Layout.php
controller_front_send_response_before response Magento\Framework\App\FrontController.php
controller_front_send_response_after response Magento\Framework\App\FrontController.php
inventory_source_save_after source Magento_Inventory/Model/Source.php
inventory_source_save_before source Magento_Inventory/Model/Source.php
inventory_source_delete_after source Magento_Inventory/Model/Source.php
inventory_source_delete_before source Magento_Inventory/Model/Source.php
inventory_stock_item_save_after stock_item Magento_Inventory/Model/StockItem.php
inventory_stock_item_save_before stock_item Magento_Inventory/Model/StockItem.php
inventory_stock_item_delete_after stock_item Magento_Inventory/Model/StockItem.php
inventory_stock_item_delete_before stock_item Magento_Inventory/Model/StockItem.php
inventory_reservation_save_after reservation Magento_Inventory/Model/Reservation.php
inventory_reservation_save_before reservation Magento_Inventory/Model/Reservation.php
inventory_reservation_delete_after reservation Magento_Inventory/Model/Reservation.php
inventory_reservation_delete_before reservation Magento_Inventory/Model/Reservation.php
catalogsearch_query_save_after query Magento_CatalogSearch/Model/Query.php
catalogsearch_query_save_before query Magento_CatalogSearch/Model/Query.php
catalogsearch_query_delete_after query Magento_CatalogSearch/Model/Query.php
catalogsearch_query_delete_before query Magento_CatalogSearch/Model/Query.php
catalogsearch_fulltext_prepare_index product, store_id Magento_CatalogSearch/Model/Indexer/Fulltext.php
review_save_after review Magento_Review/Model/Review.php
review_save_before review Magento_Review/Model/Review.php
review_delete_after review Magento_Review/Model/Review.php
review_delete_before review Magento_Review/Model/Review.php
rule_save_after rule Magento_Rule/Model/AbstractModel.php
rule_save_before rule Magento_Rule/Model/AbstractModel.php
rule_delete_after rule Magento_Rule/Model/AbstractModel.php
rule_delete_before rule Magento_Rule/Model/AbstractModel.php
core_layout_update_get_updates_before updates Magento\Framework\View\Model\Layout\Update.php
core_layout_update_get_updates_after updates Magento\Framework\View\Model\Layout\Update.php
core_layout_render_element element Magento\Framework\View\Layout\Generator\Block.php
core_layout_render_element_after element Magento\Framework\View\Layout\Generator\Block.php
controller_action_layout_generate_blocks_after layout Magento\Framework\App\Action\Action.php
controller_action_layout_render_before layout Magento\Framework\App\Action\Action.php
controller_action_layout_render_after layout Magento\Framework\App\Action\Action.php
quote_save_after quote Magento_Quote/Model/Quote.php
quote_save_before quote Magento_Quote/Model/Quote.php
quote_item_save_after quote_item Magento_Quote/Model/Quote/Item.php
quote_item_save_before quote_item Magento_Quote/Model/Quote/Item.php
quote_item_delete_after quote_item Magento_Quote/Model/Quote/Item.php
quote_item_delete_before quote_item Magento_Quote/Model/Quote/Item.php
quote_collect_totals_before quote Magento_Quote/Model/Quote.php
quote_collect_totals_after quote Magento_Quote/Model/Quote.php
quote_address_collect_totals_before address Magento_Quote/Model/Quote/Address.php
quote_address_collect_totals_after address Magento_Quote/Model/Quote/Address.php
tax_class_save_after tax_class Magento_Tax/Model/ClassModel.php
tax_class_save_before tax_class Magento_Tax/Model/ClassModel.php
tax_class_delete_after tax_class Magento_Tax/Model/ClassModel.php
tax_class_delete_before tax_class Magento_Tax/Model/ClassModel.php
tax_calculation_save_after tax_calculation Magento_Tax/Model/Calculation.php
tax_calculation_save_before tax_calculation Magento_Tax/Model/Calculation.php
shipping_method_is_active result, method_instance, quote Magento_Shipping/Model/Carrier/AbstractCarrier.php
sales_quote_address_collect_totals_after address Magento_Quote/Model/Quote/Address.php
sales_quote_address_collect_totals_before address Magento_Quote/Model/Quote/Address.php
sales_quote_address_save_after address Magento_Quote/Model/Quote/Address.php
sales_quote_address_save_before address Magento_Quote/Model/Quote/Address.php
sales_quote_address_delete_after address Magento_Quote/Model/Quote/Address.php
sales_quote_address_delete_before address Magento_Quote/Model/Quote/Address.php
cataloginventory_stock_item_save_after stock_item Magento_CatalogInventory/Model/Stock/Item.php
cataloginventory_stock_item_save_before stock_item Magento_CatalogInventory/Model/Stock/Item.php
cataloginventory_stock_item_delete_after stock_item Magento_CatalogInventory/Model/Stock/Item.php
cataloginventory_stock_item_delete_before stock_item Magento_CatalogInventory/Model/Stock/Item.php
cataloginventory_stock_status_save_after stock_status Magento_CatalogInventory/Model/Stock/Status.php
cataloginventory_stock_status_save_before stock_status Magento_CatalogInventory/Model/Stock/Status.php
wishlist_save_after wishlist Magento_Wishlist/Model/Wishlist.php
wishlist_save_before wishlist Magento_Wishlist/Model/Wishlist.php
wishlist_delete_after wishlist Magento_Wishlist/Model/Wishlist.php
wishlist_delete_before wishlist Magento_Wishlist/Model/Wishlist.php
wishlist_item_save_after wishlist_item Magento_Wishlist/Model/Item.php
wishlist_item_save_before wishlist_item Magento_Wishlist/Model/Item.php
wishlist_item_delete_after wishlist_item Magento_Wishlist/Model/Item.php
wishlist_item_delete_before wishlist_item Magento_Wishlist/Model/Item.php
review_save_after review Magento_Review/Model/Review.php
review_save_before review Magento_Review/Model/Review.php
review_delete_after review Magento_Review/Model/Review.php
review_delete_before review Magento_Review/Model/Review.php
review_collection_load_before collection Magento_Review/Model/ResourceModel/Review/Collection.php
review_collection_load_after collection Magento_Review/Model/ResourceModel/Review/Collection.php
customer_segment_save_after segment Magento_CustomerSegment/Model/Segment.php
customer_segment_save_before segment Magento_CustomerSegment/Model/Segment.php
customer_segment_delete_after segment Magento_CustomerSegment/Model/Segment.php
customer_segment_delete_before segment Magento_CustomerSegment/Model/Segment.php
store_save_after store Magento_Store/Model/Store.php
store_save_before store Magento_Store/Model/Store.php
store_delete_after store Magento_Store/Model/Store.php
store_delete_before store Magento_Store/Model/Store.php
url_rewrite_save_after url_rewrite Magento_UrlRewrite/Model/UrlRewrite.php
url_rewrite_save_before url_rewrite Magento_UrlRewrite/Model/UrlRewrite.php
url_rewrite_delete_after url_rewrite Magento_UrlRewrite/Model/UrlRewrite.php
url_rewrite_delete_before url_rewrite Magento_UrlRewrite/Model/UrlRewrite.php
core_config_data_save_after config Magento_Config/Model/Config.php
core_config_data_save_before config Magento_Config/Model/Config.php
core_config_data_delete_after config Magento_Config/Model/Config.php
core_config_data_delete_before config Magento_Config/Model/Config.php
app_area_list_after area_list Magento\Framework\App\AreaList.php
app_state_set_mode_after mode Magento\Framework\App\State.php
app_state_set_mode_before mode Magento\Framework\App\State.php
cms_page_render_before page, transport Magento_Cms/Model/Page.php
cms_page_render_after page, transport Magento_Cms/Model/Page.php
cms_page_save_after page Magento_Cms/Model/Page.php
cms_page_save_before page Magento_Cms/Model/Page.php
catalog_product_type_configurable_price product, price, qty Magento_ConfigurableProduct/Model/Product/Type/Configurable.php
catalog_product_type_configurable_children children, product Magento_ConfigurableProduct/Model/Product/Type/Configurable.php
catalog_product_type_configurable_save_after product Magento_ConfigurableProduct/Model/Product/Type/Configurable.php
bundle_product_save_after product Magento_Bundle/Model/Product/Type.php
bundle_product_save_before product Magento_Bundle/Model/Product/Type.php
bundle_product_delete_after product Magento_Bundle/Model/Product/Type.php
bundle_product_delete_before product Magento_Bundle/Model/Product/Type.php
gift_message_save_after gift_message Magento_GiftMessage/Model/Message.php
gift_message_save_before gift_message Magento_GiftMessage/Model/Message.php
gift_message_delete_after gift_message Magento_GiftMessage/Model/Message.php
gift_message_delete_before gift_message Magento_GiftMessage/Model/Message.php
review_save_after review Magento_Review/Model/Review.php
review_save_before review Magento_Review/Model/Review.php
review_delete_after review Magento_Review/Model/Review.php
review_delete_before review Magento_Review/Model/Review.php
catalogrule_save_after rule Magento_CatalogRule/Model/Rule.php
catalogrule_save_before rule Magento_CatalogRule/Model/Rule.php
catalogrule_delete_after rule Magento_CatalogRule/Model/Rule.php
catalogrule_delete_before rule Magento_CatalogRule/Model/Rule.php
salesrule_save_after rule Magento_SalesRule/Model/Rule.php
salesrule_save_before rule Magento_SalesRule/Model/Rule.php
salesrule_delete_after rule Magento_SalesRule/Model/Rule.php
salesrule_delete_before rule Magento_SalesRule/Model/Rule.php
cache_flush_all Magento\Framework\App\Cache\Manager.php
cache_flush_system Magento\Framework\App\Cache\Manager.php
model_save_after object Magento\Framework\Model\AbstractModel.php
model_save_before object Magento\Framework\Model\AbstractModel.php
model_delete_after object Magento\Framework\Model\AbstractModel.php
model_delete_before object Magento\Framework\Model\AbstractModel.php
email_template_send_before email, template Magento_Email/Model/Template.php
email_template_send_after email, template Magento_Email/Model/Template.php
email_template_send_error email, template Magento_Email/Model/Template.php

Example: Observing the customer_register_success Event

To react when a customer registers, you can create an observer for the customer_register_success event. Here’s a step-by-step example:

  1. Create events.xml in your custom module: app/code/Vendor/Module/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="customer_register_success">
        <observer name="vendor_module_customer_register" instance="Vendor\Module\Observer\CustomerRegisterObserver" />
    </event>
</config>
  1. Create the Observer class: app/code/Vendor/Module/Observer/CustomerRegisterObserver.php
<?php
namespace Vendor\Module\Observer;

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

class CustomerRegisterObserver implements ObserverInterface
{
    public function execute(Observer $observer)
    {
        $customer = $observer->getEvent()->getCustomer();
        // Example: Send a custom welcome message
        $name = $customer->getFirstname();
        $email = $customer->getEmail();
        // Log the registration (or any custom action)
        file_put_contents(BP . '/var/log/customer_register.log', "New customer: $name, $email\n", FILE_APPEND);
    }
}

This observer is automatically triggered whenever a customer completes registration. You can modify it to perform additional tasks, such as sending custom emails, assigning loyalty points, or integrating with external systems.

Example 2: Observing the sales_order_place_after Event

This event is triggered after an order is successfully placed. Observers for this event are commonly used for custom order processing, notifications, or integration with third-party systems.

  1. Create events.xml in your custom module: app/code/Vendor/Module/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="sales_order_place_after">
        <observer name="vendor_module_order_place" instance="Vendor\Module\Observer\OrderPlaceObserver" />
    </event>
</config>
  1. Create the Observer class: app/code/Vendor/Module/Observer/OrderPlaceObserver.php
<?php
namespace Vendor\Module\Observer;

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

class OrderPlaceObserver implements ObserverInterface
{
    public function execute(Observer $observer)
    {
        $order = $observer->getEvent()->getOrder();
        $orderId = $order->getIncrementId();
        $grandTotal = $order->getGrandTotal();
        // Example: Log order info
        file_put_contents(BP . '/var/log/order_place.log', "Order #$orderId placed, total: $grandTotal\n", FILE_APPEND);
    }
}

Example 3: Observing the `catalog_category_save_after` Event

This event is triggered after a category is saved. Observers are useful for automatically updating category-related data, syncing with external systems, or performing additional validations.

  1. Create events.xml in your custom module: app/code/Vendor/Module/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="catalog_category_save_after">
        <observer name="vendor_module_category_save" instance="Vendor\Module\Observer\CategorySaveObserver" />
    </event>
</config>
  1. Create the Observer class: app/code/Vendor/Module/Observer/CategorySaveObserver.php
<?php
namespace Vendor\Module\Observer;

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

class CategorySaveObserver implements ObserverInterface
{
    public function execute(Observer $observer)
    {
        $category = $observer->getEvent()->getCategory();
        $categoryName = $category->getName();
        $categoryId = $category->getId();
        // Example: Log category updates
        file_put_contents(BP . '/var/log/category_save.log', "Category #$categoryId saved: $categoryName\n", FILE_APPEND);
    }
}

With these examples, developers can see how to connect an event to custom logic. The same approach applies to hundreds of Magento 2 core events listed in the table above.

Magento 2's event-driven architecture provides developers with a flexible way to extend functionality without modifying core code. By observing events, you can implement custom logic for a wide range of scenarios, from checkout and order processing to product management and customer interactions.

Here are some best practices and tips when working with events:

  • Focus on core events first: Always use core Magento 2 events for standard workflows. Avoid modifying core files.
  • Use descriptive observer names: When defining observers in events.xml, choose names that clearly indicate their purpose.
  • Keep observers lightweight: Avoid heavy computations inside observers. Offload intensive tasks to cron jobs or asynchronous processes when possible.
  • Debugging: Use logging (e.g., var/log) or Xdebug to ensure your observer is triggered as expected.
  • Test in a safe environment: Always test new observers on a development or staging site before deploying to production.
  • Reuse existing events: Before creating custom events, check if a core event already covers your needs.

By combining the full list of Magento 2 core events with practical examples, you now have a solid reference to develop maintainable, scalable, and robust customizations. Understanding how and when to use these events will greatly improve your efficiency as a Magento 2 developer.

Back to Top