How Routes Work in Magento

In Magento 2, routes are used to determine which module and controller will be responsible for handling a request.

When a request is made to the Magento server, the server uses the frontName value in the route to determine which module and controller should handle the request. The frontName value is specified in the routes.xml file of the module, and it is usually the first segment of the URL after the base URL. For example, if the frontName value is catalog, then a request to http://www.example.com/catalog/products/view/id/1 would be handled by the module and controller specified in the route.

The action value in the route specifies the action method in the controller that should be executed to handle the request. In the example URL above, the view value in the URL specifies the action method to be executed.

The id value in the URL is passed as a parameter to the action method. In this case, the id value would be 1.

Routes are defined in the etc/frontend/routes.xml file of a module, or in the etc/adminhtml/routes.xml file for backend routes.

Here is an example of a route definition in the etc/frontend/routes.xml file of a module:

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd">
    <router id="standard">
        <route id="customroute" frontName="custom">
            <module name="Vendor_Module" />
        </route>
    </router>
</config>

This route definition specifies that requests to http://www.example.com/custom/* will be handled by the Vendor_Module module.

The Vendor_Module module will have a controller class with the name Controller\Custom\*, where * is the action specified in the URL. For example, a request to http://www.example.com/custom/index will be handled by the indexAction method in the Controller\Custom\Index controller class.

Here is an example of a route definition in the etc/frontend/routes.xml file of a module:

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd">
    <router id="standard">
        <route id="customroute" frontName="custom">
            <module name="Vendor_Module" />
        </route>
    </router>
</config>

This route definition specifies that requests to http://www.example.com/custom/* will be handled by the Vendor_Module module.

The Vendor_Module module will have a controller class with the name Controller\Custom\*, where * is the action specified in the URL. For example, a request to http://www.example.com/custom/index will be handled by the indexAction method in the Controller\Custom\Index controller class.

Hope this is going to help you in understanding the basic routes and controllers idea how they work.
Thanks for reading!