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 Company\Module\Controller\Index;
use Magento\Framework\Controller\ResultFactory;
use Magento\Framework\View\Result\PageFactory;
use Magento\Framework\App\Action\Context;
class Booking extends \Magento\Framework\App\Action\Action
{
protected $customerSession;
protected $urlInterface;
public function __construct(
\Magento\Customer\Model\Session $customerSession,
\Magento\Framework\UrlInterface $urlInterface,
\Magento\Framework\App\Action\Context $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="Company\Module\Block\Booking"
name="companymodule.booking" template="Company_Module::booking.phtml"/>
</referenceContainer>
</body>
</page>
My Block code path ( app/code/Company/Module/Block/Booking.php )
<?php
namespace Company\Module\Block;
class Booking extends \Magento\Framework\View\Element\Template
{
/**
* Construct
*
* @param \Magento\Framework\View\Element\Template\Context $context
* @param array $data
*/
public function __construct(
\Magento\Framework\View\Element\Template $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.