Magento2 Create a Simple Module


Today I am going to demonstrate you how to create a basic custom module in magento2.Prerequisites :This tutorial assumes that you have installed magento with latest version on your machine and you have basic knowledge in magento and magento2.Create Module Directories:To get started you must create module directories inside app/code folder. If Code folder doesn’t exist create it. Module directories involve <namespace>/<module_name>So the directory structure should be: app/code/<namespace>/<module>Create a Simple HelloWorld module:To get started we have to go through the following steps:
- Create module directories as stated above
- Create module.xml configuration file to declare module
- Create Registration.php to register the module
- Create a router.xml to declare the route
- Create a simple controller and action method
- Enable your module
- Setup & deploy your module
- Create Module Directories :In module we will use
Knowas Vendor name andHelloWorldas our module name. So our directory structure looks like:app/code/Know/HelloWorld - Create module.xml Configuration file to declare module:To create module we need to add the configuration file under
etcdirectory and addmodule.xml:app/code/Know/HelloWorld/etc/module.xml
Add following content tomodule.xml:<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"> <module name="Know_HelloWorld" setup_version="1.0.0" /> </config>In Above file we are declaring our module with name"Know_HelloWorld"along with version1.0.0 - Create Registration.php to register the module
ComponentRegister class is used to register our module in magento system. The name of file is kept
"Registration.php"and is kept in the root directory of our module, i.e:app/code/Know/HelloWorld/Registration.php
Add the following code in your
Registration.phpfile<?php \Magento\Framework\Component\ComponentRegistrar::register( \Magento\Framework\Component\ComponentRegistrar::MODULE, 'Know_HelloWorld', __DIR__ ); ?>Specify your
<Vendor>_<MduleName>
in second parameter ofregistermethod ofComponentRegistrarclass. - Create a routes.xml to declare the route
The request Url contains the following format:
http://examplestore.com/<router>/<controller>/<action>
We are creating frontend controller. So in order to do that we need to define our router for frontend controller by creating folder
frontendunderetcdirectory of module and create a new file with nameroutes.xmlunder our newly created directory:app/code/Know/HelloWorld/etc/frontend/routes.xml
Add the below content in file:
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd"> <router id="standard"> <route id="knowTheMage" frontName="helloworld"> <module name="Know_HelloWorld" /> </route> </router> </config>After definition, we have our router name
helloworldas mentioned in above code under the attributefrontName. Theidof module should be unique. We are also specifying our module for that specific router.The request would be :
http://examplestore.com/helloworld/*/*
- Create a simple controller and action method
In order to define the route completely we need to create
Controllerand anMethodinside it.To create a controller, create a
Controllerdirectory inside your module’s root directory.Now let’s assume that we want our url to be
http://examplestore.com/helloworld/index/welcomeSo from above url we already have our router i.e
helloworldWe just need to createindexandwelcome. Hereindexis the name of directory we will creating and serves as ControllerName here inmagento2while the other one is our method name which will a class Name and a php file exactly i.eWelcome.phpapp/code/Know/HelloWorld/Controller/Index/Welcome.php
Add following content your
Welcome.phpfile:<?php namespace Know\HelloWorld\Controller\Index; use \Magento\Framework\App\Action\Context as Context; class Welcome extends \Magento\Framework\App\Action\Action { public function __construct(Context $context) { return parent::__construct($context); } public function execute() { echo 'Welcome! Magento2 is awesome.'; } } ?> - Enable your module
Magento system knows about the existance of our module now. To know about that we need to run a command via composer or command line tool by going to root directory of magento installation. Run following command:
php bin/magento module:status
It will list down the list of disabled and enabled module. Our module will be listed under:
List of disabled modules: Know_HelloWorld
So to enable our module so that magento knows in enabled list we need to run the following command via command line / composer:
php bin/magento module:enable Know_HelloWorld
In result:
The following modules have been enabled: - Know_HelloWorld
- Setup & deploy your module
Magento needs to check and upgrade module database. Also to properly enable and deploy our module we need to run the following command:
php bin/magneto setup:upgrade
To make sure your module exists go to
admin>Stores> Configuration >Advanced>Advancedand there you will see your module is listed there.Now if you open up
http://examplestore.com/helloworld/index/welcomeyou will the output by the controller:Welcome! Magento2 is awesome.
You can directly download the module from : https://github.com/arsalanworld/Know_HelloWorld







2 Comments
Thanks for sharing this post, when i was stuck in creating controller, your guide helped me a lot, but for structure of module i followed this post, https://www.cloudways.com/blog/create-module-in-magento-2/
I am glad my post Helped you 🙂