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
cd app/codeCreate your company name directory
mkdir HelloCreate you module name directory
mkdir Hello/WorldCreate etc directory to hold module config file
mkdir Hello/World/etcmodule.xml file is required only to hold module name and it’s version
vi Hello/World/etc/module.xml<?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"></module>
</config>Register your module, this is required in all the modules. Only thing you will change is your module name (Hello_World)
vi Hello/World/registration.php<?php \Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'Hello_World',
__DIR__
);<em?>
Create frontend directory under etc to define frontend routes. We are creating this because we want to output something on frontend website.
mkdir Hello/World/etc/frontendroutes.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.
vi Hello/World/etc/frontend/routes.xml<?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 frontname="first" id="first">
<module name="Hello_World"></module>
</route>
</router>
</config>Create Controller directory to hold your module’s controller files
mkdir Hello/World/ControllerCreate your controller directory, this will become part of the url after frontName
mkdir Hello/World/Controller/HelloCreate 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.
vi Hello/World/Controller/Hello/World.php<?php namespace Hello\World\Controller\Hello;
class World extends \Magento\Framework\App\Action\Action
{
public function execute()
{
echo 'Hello world!';
}
}<em?>
Change directory to reach Magento 2 root directory
cd ../../Enable your module, so an entry will go to app/etc/config.php file and cache will be cleared
bin/magento module:enable Hello_WorldThis 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.
bin/magento setup:upgradeCheck your module in browser: http://www.yourwebsite.com/first/hello/world. If you have done everything correct, it should output “Hello world!”
