In Magento 2, controllers are used to handle user requests, process them, and return a response. Creating a custom controller involves defining routes, actions, and setting up corresponding logic to perform the required functionality. In this tutorial, we will guide you through the steps of creating a controller in Magento 2 for your custom module.

Creating a Controller in Magento 2

Before we dive into the code, let's understand the structure and the files involved in creating a controller in Magento 2.

Step 1: Define a Route

In Magento 2, routes are responsible for mapping a specific URL to a controller action. The first step in creating a controller is to define a route in the module’s routes.xml file. This file should be placed under the app/code/{Vendor}/{Module}/etc/frontend or app/code/{Vendor}/{Module}/etc/adminhtml directory, depending on whether you want to create a frontend or admin controller.

app/code/Mavenbird/CustomModule/etc/frontend/routes.xml

The contents of the file should look like this:



    
        
            
        
    

In the above example, we defined a route with the ID mavenbird_custom and the frontName mavenbird_custom. This means any request with the URL yourdomain.com/mavenbird_custom will be routed to our custom module's controller.

Step 2: Create a Controller Class

Now that we have defined the route, the next step is to create the controller class. A controller class is where we define the logic to handle requests.

app/code/Mavenbird/CustomModule/Controller/Index/Index.php

The contents of the file would be:

_resultPageFactory = $resultPageFactory;
        parent::__construct($context);
    }

    public function execute()
    {
        return $this->_resultPageFactory->create();
    }
}

In the above example, the Index controller is defined within the Index/Index.php file. We use the execute method to return the page when the controller is accessed.

Step 3: Create a Layout XML File

To display content in the controller action, you need to create a layout XML file. This file will specify which template file to use for rendering the page.

app/code/Mavenbird/CustomModule/view/frontend/layout/mavenbird_custom_index_index.xml

The contents of the file would be:



    
        
    

This XML file tells Magento to use the index.phtml template when the controller is accessed.

Step 4: Create the Template File

The last step is to create the template file, which will display the content when the controller action is executed.

app/code/Mavenbird/CustomModule/view/frontend/templates/index.phtml

The contents of the file could look like this:

Welcome to Mavenbird Custom Module
This is a custom controller action in Magento 2!

Step 5: Test Your Controller

Once everything is set up, navigate to yourdomain.com/mavenbird_custom to see your custom controller in action. If everything is correct, you should see the message from the index.phtml template displayed on the page.

Conclusion

In this tutorial, we learned how to create a custom controller in Magento 2, define routes, create a controller class, configure the layout, and display a template. With these steps, you can add custom functionality to your Magento store and extend its capabilities.