Merry Christmas
Magento 2 routing defines a URL of the module.
The entire Magento 2 application flow is based on processing URL request and router classes which are responsible for matching and processing that requests.
The request URL in Magento 2 is http://example.com/index.php/router_name/controller/action
Here, the router_name is used to find the module.
When a request is made in Magento 2, controller/action: index.php → HTTP app → FrontController → Routing → Controller processing → etc flow is followed.
The FrontController is called in Http class to routing the request which will find the controller/action match.
vendor/magento/framework/App/FrontController.php
use Magento\Framework\App\Action\AbstractAction; use Magento\Framework\App\RouterInterface; use Magento\Framework\Exception\NotFoundException; use Magento\Framework\Profiler; { Profiler::start('routers_match'); $routingCycleCounter = 0; $result = null; while (!$request->isDispatched() && $routingCycleCounter++ < 100) { /** @var RouterInterface $router */ foreach ($this->_routerList as $router) { try { $actionInstance = $router->match($request); if ($actionInstance) { $request->setDispatched(true); $this->response->setNoCacheHeaders(); if ($actionInstance instanceof AbstractAction) { $result = $actionInstance->dispatch($request); } else { $result = $actionInstance->execute(); } break; } } catch (NotFoundException $e) { $request->initForward(); $request->setActionName('noroute'); $request->setDispatched(false); break; } } } Profiler::stop('routers_match'); if ($routingCycleCounter > 100) { throw new LogicException('Front controller reached 100 router match iterations'); } return $result; }
Steps to create a custom route on frontend and admin:
Prior to implementing the below method, you may refer to the Magento 2 module development tutorial.
Create a frontend route:
Create routes.xml in app/code/[Vendor]/[Module]/etc/frontend Folder add the following code:
<?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="[Vendor]_[Module]"/> </route> </router> </config>
Create admin route:
Create routes.xml in app/code/[Vendor]/[Module]/etc/adminhtml folder and add the following code:
<?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="admin"> <route id="helloworld" frontName="helloworld"> <module name="[Vendor]_[Module]"/> </route> </router> </config>
Use route to rewrite controller:
Create routes.xml in app/code/[Vendor]/[Module]/etc/frontend Folder and add the following code:
<?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="[Vendor]_[Module]"/> </route> <route id="account"> <module name="[Vendor]_[Module]" before="Magento_Customer"/> </route> </router> </config>
That’s all about Magento 2 Routing!