How to create simple module in magento 2
-
15-04-2021 - |
Question
I'm new to magento2.
I want to create simple Hello World module in magento 2.
How to create this module?
Solution
Well this is a broad question but my best advice would be to check the official Magento 2 samples.
You can find them here: https://github.com/magento/magento2-samples
This project is a collection of samples to demonstrate technologies introduced in Magento 2. You will find the most simple extension along with samples that incrementally add features to lead you through a exploration and education of the Magento 2 platform.
On top of that you can find many tutorials if you search "magento 2 create module" in Google
OTHER TIPS
Let's name the module StackExchange_HelloWorld
.
you will need these files:
app/code/StackExchange/HelloWorld/registration.php
- the registration file
<?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'StackExchange_HelloWorld',
__DIR__
);
app/code/StackExchange/HelloWorld/etc/module.xml
- the module declaration file
<?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="StackExchange_HelloWorld" setup_version="2.0.0" />
</config>
app/code/StackExchange/HelloWorld/etc/frontend/routes.xml
- the frontend routing 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="helloworld" frontName="helloworld">
<module name="StackExchange_HelloWorld" />
</route>
</router>
</config>
app/code/StackExchange/HelloWorld/Controller/Index/Index.php
- the index controller
<?php
namespace StackExchange\HelloWorld\Controller\Index;
use Magento\Framework\App\Action\Context;
use Magento\Framework\View\Result\PageFactory;
class Index extends \Magento\Framework\App\Action\Action
{
protected $resultPageFactory;
public function __construct(
Context $context,
PageFactory $resultPageFactory
)
{
parent::__construct($context);
$this->resultPageFactory = $resultPageFactory;
}
public function execute()
{
$resultPage = $this->resultPageFactory->create();
$resultPage->getConfig()->getTitle()->set(__('Hello World'));
return $resultPage;
}
}
app/code/StackExchange/HelloWorld/view/frontend/layout/helloworld_index_index.xml
- the layout file
<?xml version="1.0"?>
<page layout="2columns-left" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
<referenceContainer name="content">
<block class="Magento\Framework\View\Element\Template" template="StackExchange_HelloWorld::index.phtml" />
</referenceContainer>
</body>
</page>
app/code/StackExchange/HelloWorld/view/frontend/templates/index.phtml
- the template for the block
<h2>Hello World</h2>
after you are done, run this in the console
php bin/magento setup:upgrade
You should be able to see the result at the url [ROOT]/helloworld
I also just tried yesterday and succeeded to make my own hello world magento 2 module. I followed this tutorial to create a simple Magento 2 module, there are 6 steps as below
=> Step 1: Make module folder:
app/code/Magentoexplorer/Helloworld
=> Step 2: Add module.xml to declear the module
<?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="Magentoexplorer_Helloworld" setup_version="1.0.0" />
</config>
=> Step 3: Create registration.php to register the module
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'Magentoexplorer_Helloworld',
__DIR__
);
=> Step 4: How to Install, Enable or Disable/remove the module
cd [magento_directory]
php bin/magento setup:upgrade
=> Step 5: Route of the module.
create app/code/Magentoexplorer/Helloworld/etc/frontend/routes.xml
<?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="magentoexplorer" frontName="helloworld">
<module name="Magentoexplorer_Helloworld" />
</route>
</router>
</config>
=> Step 6: Controller and action.
app/code/Magentoexplorer/Helloworld/Index/Index.php
<?php
namespace Magentoexplorer\Helloworld\Controller\Index;
class Display extends \Magento\Framework\App\Action\Action
{
public function __construct(
\Magento\Framework\App\Action\Context $context)
{
return parent::__construct($context);
}
public function execute()
{
echo 'Hello World';
exit;
}
}
The best module for you to follow would be this one: https://github.com/magento/magento2-samples/tree/master/sample-module-newpage
It's focused on the frontend for Magento 2. You can maybe use this module and transform it into your own module.
The most bare module is easy enough:
- Inside
app/code
create your folder for Vendor and Module. I.e.app/code/MyCompany/FirstModule
Inside the
FirstModule
folder add aregistration.php
DIR );
Inside the same folder, create an
etc
folder, likeapp/code/MyCompany/FirstModule/etc
In the
etc
folder create amodule.xml
And voila. That's it. You can now activate your module via SSH with the bin/magento module:enable MyCompany_FirstModule
command.
Below is the tutorial for simple module
https://www.mageplaza.com/magento-2-module-development/
You can also download below module
https://github.com/tzyganu/Magento2SampleModule
There are lots of module creator available for Magento 2. Here are some links
http://cedcommerce.com/magento-2-module-creator/
https://amasty.com/magento-2-module-creator.html
Hope it helps :)
To create module in Magento 2, folowing steps are required:
- Create directories.
- Configuration of Module
- Registration of Module
- Front End Router File
- Create Controller
- Create Block
- Frontend layout File
- Frontend Template File
- Module Activation
To create Hello World module in Magento 2.
For Best Use PHP Storm
To create Hello World module, you need to complete the following high-level steps:
Best Practice Use PHP Storm
Step 1: Create the folder of Hello World module
Step 2: Create module
Step 3: Register the Created Module
Step 4: Enable the module
Step 1: Create Folder of HelloWorld
Name of the module is defined as “VendorName_ModuleName”. First part is name of the vendor and last part is name of the module: For example: Sathya_HelloWorld.
##### create file directory as
Magento2/app/code/Sathya/HelloWorld
Step 2: Create Module
it is necessary to create etc folder and add the module.xml fileapp/code/Sathya/HelloWorld/etc/module.xml
Contents would be:
<?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="Sathya_HelloWorld" setup_version="1.0.0">
</module>
</config>
Step 3 : Register the Created Module
Create Registration.php file
app/code/Sathya/HelloWorld/registration.php
Contents would be:
<?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'Sathya_HelloWorld',
__DIR__
);
Step 4: Enable the module
Before enable the Module make sure whether the Module is created or not. For that run the command from the Magento root directory as.
php bin/magento module:status
It Lists all the Disabled Modules
###### Sathya_HelloWorld
To enable the Module run the command as:
php bin/magento module:enable Sathya_HelloWorld
Also there is an another way to enable it. Which will be explained later.
Please upgrade your database: Run “bin/magento setup:upgrade” from the Magento root directory.
Let run the command:
php bin/magento setup:upgrade
Please run
php bin/magento setup:static-content:deploy
Then run (optional)
php bin/magento setup:static-content:deploy -f
To add route, it is necessary to create routes.xml file
app/code/Sathya/HelloWorld/etc/frontend/routes.xml
Content would be:
<?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 frontName="helloworld" id="helloworld">
<module name="Sathya_HelloWorld"/>
</route>
</router>
</config>
The directory and file you need to create is:
app/code/Sathya/HelloWorld/Controller/Index/Test.php
Contents would be:
<?php
namespace Sathya\HelloWorld\Controller\Index;
class Test extends \Magento\Framework\App\Action\Action
{
protected $_pageFactory;
public function __construct(
\Magento\Framework\App\Action\Context $context,
\Magento\Framework\View\Result\PageFactory $pageFactory)
{
$this->_pageFactory = $pageFactory;
return parent::__construct($context);
}
public function execute()
{
echo "Hello World";
exit;
}
}
After completed, please run command to clear cache
php bin/magento c:f
Check your Module by entering URL now should be as:
http://< YourDomain.com >/helloworld/index/test
Here is an easy example to start with custom module. https://learn2code2web.com/2020/12/14/magento-2-custom-module-development/