Dec 23, 2015
kalpesh

Magento 2 hello world module in 2 mins!

Create Magento 2 hello world module in 2 minutes!

To create a simple custom module in Magento2 which will give an output on frontend website from your module, follow below steps:

Change to app/code directory where all the Magento2 module lives. Notice there are no codepools (core, community, local) under this directory like it used to be in Magento 1.x

1
cd app/code

Create your company name directory

1
mkdir Hello

Create you module name directory

1
mkdir Hello/World

Create etc directory to hold module config file

1
mkdir Hello/World/etc

module.xml file is required only to hold module name and it’s version

1
vi Hello/World/etc/module.xml
1
2
3
4
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Module/etc/module.xsd">
    <module name="Hello_World" setup_version="0.1.0" />
</config>

Register your module, this is required in all the modules. Only thing you will change is your module name (Hello_World)

1
vi Hello/World/registration.php
1
2
3
4
5
6
<?php
\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    'Hello_World',
    __DIR__
);

Create frontend directory under etc to define frontend routes. We are creating this because we want to output something on frontend website.

1
mkdir Hello/World/etc/frontend

routes.xml is used to give your module a front name. Only thing you will be interested is tag which holds frontName for the enclosed module name.

1
vi Hello/World/etc/frontend/routes.xml
1
2
3
4
5
6
7
8
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../lib/internal/Magento/Framework/App/etc/routes.xsd">
    <router id="standard">
        <route id="first" frontName="first">
            <module name="Hello_World" />
        </route>
    </router>
</config>

Create Controller directory to hold your module’s controller files

1
mkdir Hello/World/Controller

Create your controller directory, this will become part of the url after frontName

1
mkdir Hello/World/Controller/Hello

Create controller file, notice there is no controller action in Magento2 Controller. This will again become part of the url and will call execute() method of the class.

1
vi Hello/World/Controller/Hello/World.php
1
2
3
4
5
6
7
8
9
<?php
namespace Hello\World\Controller\Hello;
class World extends \Magento\Framework\App\Action\Action
{
    public function execute()
    {
        echo 'Hello world!';
    }
}

Change directory to reach Magento 2 root directory

1
cd ../../

Enable your module, so an entry will go to app/etc/config.php file and cache will be cleared

1
bin/magento module:enable Hello_World

This will add your module with it’s current version to DB table setup_module, without running this command you won’t see the changes of newly created module.

1
bin/magento setup:upgrade

Check your module in browser: http://www.yourwebsite.com/first/hello/world. If you have done everything correct, it should output “Hello world!”

Magento 2 hello world module

Leave a comment

 

Welcome to my Blog

Kalpesh MehtaHelping Magento developers in their day-to-day development problems since 2011. Most of the problems and solutions here are my own experiences while working on different projects. Enjoy the blog and don't forget to throw comments and likes/+1's/tweets on posts you like. Thanks for visiting!

Certifications