{"id":54,"date":"2018-04-04T11:54:27","date_gmt":"2018-04-04T11:54:27","guid":{"rendered":"http:\/\/codeinnovers.com\/blog\/?p=54"},"modified":"2018-04-04T11:54:27","modified_gmt":"2018-04-04T11:54:27","slug":"create-custom-event-and-observer-magento-2","status":"publish","type":"post","link":"https:\/\/codeinnovers.com\/blog\/create-custom-event-and-observer-magento-2\/","title":{"rendered":"how to create custom event and observer in Magento 2"},"content":{"rendered":"<h1>How to create custom event in Magento2<\/h1>\n<p>In today&#8217;s post we will see how to create a custom event in Magento 2. Events are one of the best choices to extend functionality of Magento without making changing in core files. In Magento2 event and observer system is based on <a href=\"https:\/\/en.wikipedia.org\/wiki\/Publish%E2%80%93subscribe_pattern\" target=\"_blank\" rel=\"noopener\">publish-subscribe pattern<\/a>.\u00a0 Magento modules dispatch a lot of useful events after performing some task and we can hook those events using observers to perform our tasks.<\/p>\n<p>Sometimes we need to create our own custom event which can be used throughout the modules. It can be used in modules which will be dependent on the module we are building. Let&#8217;s see how to dispatch a custom event and hook it using observer.<\/p>\n<h2>create custom event and observer magento 2<\/h2>\n<p>In Magento2 events can be dispatched using\u00a0 the <a href=\"https:\/\/github.com\/magento\/magento2\/blob\/2.0\/lib\/internal\/Magento\/Framework\/Event\/Manager.php\" target=\"_self\"><code class=\"highlighter-rouge\">Magento\\Framework\\Event\\Manager<\/code><\/a> class. To use this class we will have to inject the instance of this class in constructor using dependency injection.<\/p>\n<p>Below code can be used to dispatch an event in Magento2<\/p>\n<pre><code class=\"language-php\" data-lang=\"php\"><span class=\"k\">namespace<\/span> <span class=\"nx\">Mega\\EventDemo\\Controller\\Index;<\/span>\r\n<span class=\"k\">use<\/span> <span class=\"nx\">Magento\\Framework\\Event\\ObserverInterface<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">class<\/span> <span class=\"nc\">Index<\/span><span class=\"p\">{<\/span>\r\n  <span class=\"sd\">\/**\r\n  * @var EventManager\r\n  *\/<\/span>\r\n  <span class=\"k\">private<\/span> <span class=\"nv\">$eventManager<\/span><span class=\"p\">;<\/span>\r\n\r\n  <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"nf\">__construct<\/span><span class=\"p\">(<\/span><span class=\"nx\">\\Magento\\Framework\\Event\\Manager<\/span> <span class=\"nv\">$eventManager<\/span><span class=\"p\">){<\/span>\r\n    <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"na\">eventManager<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$eventManager<\/span><span class=\"p\">;\r\n    \/* some more dependencies *\/<\/span>\r\n  <span class=\"p\">}<\/span>\r\n\r\n  <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"nf\">something<\/span><span class=\"p\">(){<\/span>\r\n    <span class=\"nv\">$eventData<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">array()<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"c1\">\/\/ Code...\r\n<\/span>\r\n    <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"na\">eventManager<\/span><span class=\"o\">-&gt;<\/span><span class=\"na\">dispatch<\/span><span class=\"p\">(<\/span><span class=\"s1\">'mega_my_custom_event'<\/span><span class=\"p\">,[<\/span><span class=\"s1\">'custom_data'<\/span><span class=\"o\">=&gt;<\/span><span class=\"nv\">$eventData<\/span><span class=\"p\">]);<\/span>\r\n  <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span><\/code><\/pre>\n<pre><code class=\"language-php\" data-lang=\"php\"><\/code>The above code dispatches an event named \"<code class=\"language-php\" data-lang=\"php\"><span class=\"s1\">mega_my_custom_event<\/span><\/code>\" and passes $eventData with event. This $eventData will be available in observer when any observer hooks the above event. Now let's see how to hook this event. create a file di.xml in etc folder of your module ,add below xml code to it<\/pre>\n<pre><code class=\"language-xml\" data-lang=\"xml\"><span class=\"cp\">&lt;?xml version=\"1.0\"?&gt;<\/span>\r\n<span class=\"nt\">&lt;config<\/span> <span class=\"na\">xmlns:xsi=<\/span><span class=\"s\">\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"<\/span> <span class=\"na\">xsi:noNamespaceSchemaLocation=<\/span><span class=\"s\">\"urn:magento:framework:Event\/etc\/events.xsd\"<\/span><span class=\"nt\">&gt;<\/span>\r\n    <span class=\"nt\">&lt;event<\/span> <span class=\"na\">name=<\/span><span class=\"s\">\"<code class=\"language-php\" data-lang=\"php\"><span class=\"s1\">mega_my_custom_event<\/span><\/code>\"<\/span><span class=\"nt\">&gt;<\/span> <span class=\"nt\">&lt;observer<\/span> <span class=\"na\">name=<\/span><span class=\"s\">\"myObserverName\"<\/span> <span class=\"na\">instance=<\/span><span class=\"s\">\"Mega\\<code class=\"language-php\" data-lang=\"php\"><span class=\"nx\">EventDemo<\/span><\/code>\\Observer\\EventDemoObserver\"<\/span> <span class=\"nt\">\/&gt;<\/span> <span class=\"nt\">&lt;\/event&gt;<\/span> <span class=\"nt\">&lt;\/config&gt;<\/span><\/code><\/pre>\n<p>After the above code is added di.xml , we will have to create an observer for this event. Create a class <code class=\"language-xml\" data-lang=\"xml\"><span class=\"s\">EventDemoObserver<\/span><\/code> in Mega\\EventDemo\\Observer namespace and add below code to it.<\/p>\n<pre><code class=\"language-xml\" data-lang=\"xml\">\r\nnamespace Mega\\EventDemo\\Observer;\r\nuse Magento\\Framework\\Event\\ObserverInterface;\r\nclass <span class=\"s\">EventDemoObserver<\/span> implements ObserverInterface{\r\n    public function execute(\\Magento\\Framework\\Event\\Observer $observer)\r\n {\r\n    $eventData = $observer-&gt;getEvent()-&gt;getCustomData();\r\n    \/\/some more code \r\n }\r\n}\r\n    \r\n  \r\n<\/code><\/pre>\n<p>All required classes can be injected in observer using dependency injection in constructor. <strong>Event Areas <\/strong>Normally di.xml is placed inside etc directory. when di.xml is placed inside etc folder it will watch for the events globally. To watch for specific are place di.xml inside etc\/adminhtml and etc\/ frontend folder. etc\/adminhtml will watch for the events dispatched in admin area while etc\/frontend will watch for events dispatched in frontend. <strong>QUICK TIP: <\/strong>You should always give a unique name to your event. Its a good idea to prefix your module namespace and module name in event to make it unique.<\/p>\n<p>some of the best practices that must be taken care are available at <a href=\"http:\/\/devdocs.magento.com\/guides\/v2.0\/ext-best-practices\/extension-coding\/observers-bp.html\" target=\"_blank\" rel=\"noopener\">Magento 2 event best practices\u00a0<\/a><\/p>\n<p>That&#8217;s all for this post. If you need any help feel free to connect with us on <a href=\"http:\/\/codeinnovers.com\/contact-us\">http:\/\/codeinnovers.com\/contact-us.<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>How to create custom event in Magento2 In today&#8217;s post we will see how to create a custom event in Magento 2. Events are one of the best choices to extend functionality of Magento without making changing in core files. In Magento2 event and observer system is based on publish-subscribe pattern.\u00a0 Magento modules dispatch a [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":58,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[4],"tags":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v19.5 (Yoast SEO v19.10) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>how to create custom event and observer in Magento 2 - CodeInnovers<\/title>\n<meta name=\"description\" content=\"This post explains how to create custom event and observer magento 2 and hooking it in observer. Events in magento helps to extend Magento functionality\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/codeinnovers.com\/blog\/create-custom-event-and-observer-magento-2\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"how to create custom event and observer in Magento 2\" \/>\n<meta property=\"og:description\" content=\"This post explains how to create custom event and observer magento 2 and hooking it in observer. Events in magento helps to extend Magento functionality\" \/>\n<meta property=\"og:url\" content=\"https:\/\/codeinnovers.com\/blog\/create-custom-event-and-observer-magento-2\/\" \/>\n<meta property=\"og:site_name\" content=\"CodeInnovers\" \/>\n<meta property=\"article:published_time\" content=\"2018-04-04T11:54:27+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/codeinnovers.com\/blog\/wp-content\/uploads\/2018\/04\/Untitled-2-copy-4.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Sam Parker\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Sam Parker\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/codeinnovers.com\/blog\/create-custom-event-and-observer-magento-2\/\",\"url\":\"https:\/\/codeinnovers.com\/blog\/create-custom-event-and-observer-magento-2\/\",\"name\":\"how to create custom event and observer in Magento 2 - CodeInnovers\",\"isPartOf\":{\"@id\":\"https:\/\/codeinnovers.com\/blog\/#website\"},\"datePublished\":\"2018-04-04T11:54:27+00:00\",\"dateModified\":\"2018-04-04T11:54:27+00:00\",\"author\":{\"@id\":\"https:\/\/codeinnovers.com\/blog\/#\/schema\/person\/bbe49f6f2028b54a87fabd0b6dd3a3f8\"},\"description\":\"This post explains how to create custom event and observer magento 2 and hooking it in observer. Events in magento helps to extend Magento functionality\",\"breadcrumb\":{\"@id\":\"https:\/\/codeinnovers.com\/blog\/create-custom-event-and-observer-magento-2\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/codeinnovers.com\/blog\/create-custom-event-and-observer-magento-2\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/codeinnovers.com\/blog\/create-custom-event-and-observer-magento-2\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/codeinnovers.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"how to create custom event and observer in Magento 2\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/codeinnovers.com\/blog\/#website\",\"url\":\"https:\/\/codeinnovers.com\/blog\/\",\"name\":\"CodeInnovers\",\"description\":\"Developing the impossible\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/codeinnovers.com\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/codeinnovers.com\/blog\/#\/schema\/person\/bbe49f6f2028b54a87fabd0b6dd3a3f8\",\"name\":\"Sam Parker\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/codeinnovers.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/10f48f28ca8c9e285071c94e88696979?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/10f48f28ca8c9e285071c94e88696979?s=96&d=mm&r=g\",\"caption\":\"Sam Parker\"},\"url\":\"https:\/\/codeinnovers.com\/blog\/author\/admin\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"how to create custom event and observer in Magento 2 - CodeInnovers","description":"This post explains how to create custom event and observer magento 2 and hooking it in observer. Events in magento helps to extend Magento functionality","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/codeinnovers.com\/blog\/create-custom-event-and-observer-magento-2\/","og_locale":"en_US","og_type":"article","og_title":"how to create custom event and observer in Magento 2","og_description":"This post explains how to create custom event and observer magento 2 and hooking it in observer. Events in magento helps to extend Magento functionality","og_url":"https:\/\/codeinnovers.com\/blog\/create-custom-event-and-observer-magento-2\/","og_site_name":"CodeInnovers","article_published_time":"2018-04-04T11:54:27+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/codeinnovers.com\/blog\/wp-content\/uploads\/2018\/04\/Untitled-2-copy-4.jpg","type":"image\/jpeg"}],"author":"Sam Parker","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Sam Parker","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/codeinnovers.com\/blog\/create-custom-event-and-observer-magento-2\/","url":"https:\/\/codeinnovers.com\/blog\/create-custom-event-and-observer-magento-2\/","name":"how to create custom event and observer in Magento 2 - CodeInnovers","isPartOf":{"@id":"https:\/\/codeinnovers.com\/blog\/#website"},"datePublished":"2018-04-04T11:54:27+00:00","dateModified":"2018-04-04T11:54:27+00:00","author":{"@id":"https:\/\/codeinnovers.com\/blog\/#\/schema\/person\/bbe49f6f2028b54a87fabd0b6dd3a3f8"},"description":"This post explains how to create custom event and observer magento 2 and hooking it in observer. Events in magento helps to extend Magento functionality","breadcrumb":{"@id":"https:\/\/codeinnovers.com\/blog\/create-custom-event-and-observer-magento-2\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/codeinnovers.com\/blog\/create-custom-event-and-observer-magento-2\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/codeinnovers.com\/blog\/create-custom-event-and-observer-magento-2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/codeinnovers.com\/blog\/"},{"@type":"ListItem","position":2,"name":"how to create custom event and observer in Magento 2"}]},{"@type":"WebSite","@id":"https:\/\/codeinnovers.com\/blog\/#website","url":"https:\/\/codeinnovers.com\/blog\/","name":"CodeInnovers","description":"Developing the impossible","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/codeinnovers.com\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/codeinnovers.com\/blog\/#\/schema\/person\/bbe49f6f2028b54a87fabd0b6dd3a3f8","name":"Sam Parker","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/codeinnovers.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/10f48f28ca8c9e285071c94e88696979?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/10f48f28ca8c9e285071c94e88696979?s=96&d=mm&r=g","caption":"Sam Parker"},"url":"https:\/\/codeinnovers.com\/blog\/author\/admin\/"}]}},"_links":{"self":[{"href":"https:\/\/codeinnovers.com\/blog\/wp-json\/wp\/v2\/posts\/54"}],"collection":[{"href":"https:\/\/codeinnovers.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/codeinnovers.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/codeinnovers.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/codeinnovers.com\/blog\/wp-json\/wp\/v2\/comments?post=54"}],"version-history":[{"count":8,"href":"https:\/\/codeinnovers.com\/blog\/wp-json\/wp\/v2\/posts\/54\/revisions"}],"predecessor-version":[{"id":63,"href":"https:\/\/codeinnovers.com\/blog\/wp-json\/wp\/v2\/posts\/54\/revisions\/63"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/codeinnovers.com\/blog\/wp-json\/wp\/v2\/media\/58"}],"wp:attachment":[{"href":"https:\/\/codeinnovers.com\/blog\/wp-json\/wp\/v2\/media?parent=54"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/codeinnovers.com\/blog\/wp-json\/wp\/v2\/categories?post=54"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/codeinnovers.com\/blog\/wp-json\/wp\/v2\/tags?post=54"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}