Magento

How to create Inceptor or Plugin in Magento 2

Written by Mahesh Makwana

Mar 19

How to create Inceptor or Plugin in Magento 2

Today we learn how to create Inceptor or plugin in Magento 2.  At development time we need to change some function behavior so Magento provides a plugin for it.

A Plugin or Inceptor allows change behavior of any public class or method by intercepting a function call and running code. Plugins are only used for “public methods”.

Types Of Plugins In Magento 2

  • Before Plugin
  • After Plugin
  • Around Plugin

Why we use Interceptors or Extension in Magento 2?

  • we can change the behavior of the same class or method
  • The plugin can be called sequentially according to sort order, so conflict with other plugin class can be avoided.
  • No issue of rewriting the system
  • Customize the same method in different modules.
  • Ability to modify the return value of any public method.
  • Ability to modify the arguments of any public method.
  • Plugins do not conflict with other plugin classes.

The Magento 2 Plugins can’t be used with:

  • Non-public methods (Protected & Private)
  • Static methods
  • Final Methods
  • Final classes
  • Virtual Types
  • Any class that has at least one final public method
  • Objects that are instantiated before Magento\Framework\Interception is bootstrapped
  • __construct and __destruct

Declaring a plugin

A plugin can be declared in the di.xml file in your module.

app/code/VendoreName/ModuleName/etc/di.xml

<config>
    <type name="{ObservedType}">
      <plugin name="{pluginName}" type="{PluginClassName}" sortOrder="1" disabled="false" />
    </type>
</config>
  • type name: A class or interface which the plugin observes.
  • plugin name An arbitrary plugin name that identifies a plugin. Also used to merge the configurations for the plugin.
  • plugin type: The name of a plugin’s class or its virtual type. Use the following naming convention when you specify this element: \Vendor\Module\Plugin\<ClassName>.
  • plugin sortOrder: Plugins that call the same method run them using this order. (Optional)
  • plugin disabled: To disable a plugin, set this element to true. The default value is false. (Optional)
<type name="Dolphin\PluginDemo\Controller\Index\PluginExample">
    <plugin name="demo_plugin" type="Dolphin\PluginDemo\Plugin\PluginDemo" sortOrder="1" disabled="false"  />
</type>

For example, the following code defines type name, we created PluginExample.php file at app/code/Dolphin/PluginDemo/Controller/Index/PluginExample.php

if you don’t know how to create module click here 

<?php

namespace Dolphin\PluginDemo\Controller\Index;

class PluginExample extends \Magento\Framework\App\Action\Action
{
    protected $title;

    public function execute()
    {
        echo $this->setTitle('Welcome Plugin');
        echo $this->getTitle();
    }

    public function setTitle($title)
    {
        return $this->title = $title;
    }

    public function getTitle()
    {
        return $this->title;
    }
}

Find here for more plugins: Magento 2 Extension

1) Before Plugin

  • Before plugin are used whenever we need to change the arguments of the method or need to add some behavior before a method is called.
  • The first method to run is an observed method.
  • Before plugin is called by adding the prefix ‘before’ to the method name and setting the first letter of the original method to capital.
  • It lets you modify the parameters that will be used.
  • Example
<?php

    namespace Dolphin\PluginDemo\Plugin;

    class PluginDemo
    {
        public function beforeSetTitle(\Dolphin\PluginDemo\Controller\Index\PluginExample $subject, $title)
        {
            $title = $title." Before plugin method is calll</br>";
            return [$title];
        }

    }

2) After Plugin

  • After Plugins are used whenever we need to change the arguments of method or need to add some behavior after a method is called.
  • Starts running after the observed method is finished
  • After Plugin is called by adding the prefix ‘after’ to the method name and setting the first letter of the original method to capital.
  • It let you modify the output
  • Responsible for editing the results of an observed method in the right way and must have a return value.
  • Example
<?php

    namespace Dolphin\PluginDemo\Plugin;

    class PluginDemo
    {
        public function afterGetTitle(\Dolphin\PluginDemo\Controller\Index\PluginExample $subject, $result)
        {

            echo "After plugin method call</br>";

            return $result . 'Modify Result';

        }

    }

3) Around Plugin

  • Around Plugin run before and after the observed method.
  • Allows overriding a method
  • Around Plugin change both the arguments and the returned values of the observed method or add behavior before and after the observed method is called.
  • Around listener is called by adding the prefix ‘around’ to the method name and setting the first letter of original method to capital.
  • It must have a return value
  • Example
<?php

    namespace Dolphin\PluginDemo\Plugin;

    class PluginDemo
    {
        public function aroundGetTitle(\Dolphin\PluginDemo\Controller\Index\PluginExample $subject, callable $proceed)
        {
            echo "Around Method Call"
            $result = $proceed();
            echo "Around Method Call over"
            return $result;
        }

    }

Plugins are commonly used in Magento development.

I hope this helps you. For any doubts regarding this topic, please write your doubts in the comments section.

Written by Mahesh Makwana

Our Magento Store

Do not miss a chance to grab exciting offers on Magento Development at Dolphin Web Solution. We are providing discounts on various Magento services this season. Go and grab yours today at our Magento Store.

Multiple Wishlist for Magento 2

Multiple Wishlist for Magento 2

₹ 3106

Wallet and Reward Points for Magento 2

Wallet and Reward Points for Magento 2

₹ 9476

RMA for Magento 2

RMA for Magento 2

₹ 11865

₹ 14254
Abandoned Cart Email for Magento 2

Abandoned Cart Email for Magento 2

₹ 6291

Simple Details on Configurable Product for Magento 2

Simple Details on Configurable Product for Magento 2

₹ 7883

₹ 9476
Frequently Bought Together for Magento 2

Frequently Bought Together for Magento 2

₹ 5494

₹ 7087

Let's Start Your Project

Get free consultation for your digital product idea to turn it into reality!

Copyright © 2023 DOLPHIN WEB SOLUTION. All rights reserved.

TO TOP