InsideDarkWeb.com

Custom controller goes to 404 for custom form in Magento 2?

I have created a custom controller to show a custom form but it goes to 404 page in Magento 2 ?

Controller file path : ( app/code/Company/Module/Controller/Index/Booking.php )

<?php

namespace CompanyModuleControllerIndex;

use MagentoFrameworkControllerResultFactory;
use MagentoFrameworkViewResultPageFactory;
use MagentoFrameworkAppActionContext;

class Booking extends MagentoFrameworkAppActionAction
{
protected $customerSession;
protected $urlInterface;

public function __construct(
    MagentoCustomerModelSession $customerSession,
    MagentoFrameworkUrlInterface $urlInterface,
    MagentoFrameworkAppActionContext $context
) {
    $this->urlInterface = $urlInterface;
    $this->customerSession = $customerSession; 
    parent::__construct($context);
}
/**
 * Booking action
 *
 * @return void
 */
public function execute()
{
    if(!$this->customerSession->isLoggedIn()) {
        $this->messageManager->addErrorMessage("You must be logged in to view product");
        $this->customerSession->setAfterAuthUrl($this->urlInterface->getCurrentUrl());
        $this->customerSession->authenticate();
        return;
    }
    // 1. POST request : Get booking data
    $post = (array) $this->getRequest()->getPost();

    if (!empty($post)) {
        // Retrieve your form data
        $firstname   = $post['firstname'];
        $lastname    = $post['lastname'];
        $phone       = $post['phone'];
        $bookingTime = $post['bookingTime'];

        // Doing-something with...

        // Display the succes form validation message
        $this->messageManager->addSuccessMessage('Booking done !');

        // Redirect to your form page (or anywhere you want...)
        $resultRedirect = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT);
        $resultRedirect->setUrl('/companymodule/index/booking');

        return $resultRedirect;
    }
    // 2. GET request : Render the booking page 
    $this->_view->loadLayout();
    $this->_view->renderLayout();
}
}

My routes file path ( app/code/Company/Module/etc/frontend/routes.xml )

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd">
<router id="standard">
    <route id="companymodule" frontName="companymodule">
        <module name="Company_Module"/>
    </route>
</router>
</config>

My companymodule_index_booking.xml file path ( app/code/Company/Module/view/frontend/layout/companymodule_index_booking.xml )

<?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">
<head>
    <title>HTML title - The booking form page</title>
</head>
<body>
    <referenceBlock name="navigation.sections" remove="true" />
    <referenceContainer name="content">
        <block class="CompanyModuleBlockBooking" 
name="companymodule.booking" template="Company_Module::booking.phtml"/>
    </referenceContainer>
</body>
</page>

My Block code path ( app/code/Company/Module/Block/Booking.php )

<?php

namespace CompanyModuleBlock;

class Booking extends MagentoFrameworkViewElementTemplate
{
/**
 * Construct
 *
 * @param MagentoFrameworkViewElementTemplateContext $context
 * @param array $data
 */
public function __construct(
    MagentoFrameworkViewElementTemplate $context,
    array $data = []
)
{
    parent::__construct($context, $data);
   }

/**
 * Get form action URL for POST booking request
 *
 * @return string
 */
public function getFormAction()
{
        // companymodule is given in routes.xml
        // controller_name is folder name inside controller folder
        // action is php file name inside above controller_name folder

    return '/companymodule/controller_name/action';
    // here controller_name is index, action is booking
}
}

I have followed this How to Create Custom Form in Magento2 Frontend? for that but 404 comes how to solve that error.
Any help is appriciated.

Magento Asked by Prits on November 9, 2020

2 Answers

2 Answers

Please update the below files

Block

<?php 
namespace namespace CompanyModuleBlock;


class Booking extends MagentoFrameworkViewElementTemplate
{
public function __construct(
    MagentoFrameworkViewElementTemplateContext $context
) {
    parent::__construct($context);
}

public function _prepareLayout()
{   
    return parent::_prepareLayout();
}
}

Controller

<?php
namespace CompanyModuleControllerIndex;

class Index extends MagentoFrameworkAppActionAction
{
public function execute()
{
    $this->_view->loadLayout();
    $this->_view->getLayout()->initMessages();
    $this->_view->renderLayout();
}
}

Layout

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
    <referenceContainer name="content">
        <block class="CompanyModuleBlockBooking" name="booking" template="booking.phtml">
        </block>
    </referenceContainer>
</body>

Answered by Harsh Jayswal on November 9, 2020

Change your controller like this :

<?php
namespace CompanyModuleControllerIndex;

use MagentoFrameworkControllerResultFactory;

class Booking extends MagentoFrameworkAppActionAction
{
   public function execute()
   {
       $this->_view->loadLayout();
       $this->_view->renderLayout();
   }
}

And then check does your URL is access or not.

Answered by Dhiren Vasoya on November 9, 2020

Add your own answers!

Related Questions

Same email different customer

0  Asked on February 21, 2021 by aivdev

   

Cron job is running but not updating Inventory

0  Asked on February 20, 2021 by anonymous-record

       

Sending variable to a bootstrap modal

1  Asked on February 19, 2021 by jayreis

         

No varnish headers

2  Asked on February 17, 2021 by maciej

     

Magento 2 : create view table via setup script

2  Asked on February 15, 2021 by dominic-xigen

   

Ask a Question

Get help from others!

© 2021 InsideDarkWeb.com. All rights reserved.