We have been actively blogging on the new features and functionalities in Magento 2. In that series, this blog is about Magento 2 plugins.Here we discuss the plugin structure and how to create a plugin.

To understand plugins, it is important to have knowledge on Magento 2 theme structure. Please refer to the blog below to know more about Magento 2 theme structure.
http://www.dckap.com/blog/magento-2-theme-structure

Magento 2 Plugin
  • Plugin is a class which changes the behavior of an original method in Magento code.
  • Magento 2 introduces interception concept which avoid conflicts between extensions, which changes the behavior of the same class or method.
  • Plugin uses before, after, or around an original method. 
Listeners in Plugin
  • beforemethodname() -> to change the arguments of an original method or add some behavior before an original method is called, use the before-listener method. The before prefix should be added to the name of an original method. 
  • aftermethodname() -> to change the values returned by an original method or add some behavior after an original method is called, use the after-listener method. The after prefix should be added to the name of an original method. 
  • aroundmethodname() -> to change both the arguments and returned values of an original method or add some behavior before and after an original method is called, use the around-listener method. The around prefix should be added to the name of an original method. 
Declaring a Plugin

A plugin can be declared in di.xml file. The declaration syntax for plugin is

type name -> a class, interface, or virtual type, which is observed by a plugin.
plugin name -> an arbitrary plugin name
plugin type -> the name of a plugin’s class or virtual type
plugin sortOrder -> order, in which the plugins calling the same method are to be executed.
plugin disabled ->to disable a plugin, the value of the element should be set to ‘true.’

Sample Plugin from module Catalog -> di.xml

“clean(\Magento\Log\Model\Log $object)” in type Magento\Log\Model\Resource\Log  is overwritten by the method “afterClean(\Magento\Log\Model\Resource\Log $subject, $logResourceModel)” found in Plugin file “Magento\Catalog\Model\Plugin\Log”.

Magento\Log\Model\Resource\Log.php file

Magento\Catalog\Model\Plugin\Log.php file

Creating a Plugin

Please refer the below blog for creating a module.
http://www.dckap.com/blog/magento-2-module-development
After creating a module, please follow the below steps for creating a plugin.

Step 1: Create the Block file app/code/Dckap/Welcome/Block/Welcome.php

Step 2: In /app/code/Dckap/Welcome/view/frontend/templates/ create a template file welcome.phtml

Step 3: Create the file di.xml inside app/code/Dckap/Welcome/etc/

Add the below lines in di.xml

Step 4: Create a model file Welcome1.php inside the path app/code/Dckap/Welcome/Model

Magento 2 plugins 1

Please take a look on ‘Hello World’ text displayed in the front end of the module.

Step 5:  Create a Plugin folder inside Model folder of the module.

File Welcome2.php needs to be created inside that Plugin folder.


The  beforeDckModelWelcome method in the  Welcome2.php file appends ‘Welcome to ‘ text with ‘Hello World‘ text of  DckModelWelcome method present inside  Welcome1.php file.

Magento 2 plugins 2

Limitations

Plugin does not apply to following Scenario

  •           Classes created without dependency injection
  •           Final methods
  •           Final classes

As Magento 2 is coming, it’s a good idea to become familiar with its various new features and functionalities instead of waiting until the last hour.

Hopefully this blog is a good motivation and/or introduction to get started with Magento 2 plugin development.

Be the first to Know

Subscribe to our blog to get the latest articles directly to your inbox.

READY TO DRIVE SALES?

Request a Quote Today

Request a Quote