Magento Asked by Prits on November 9, 2020
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.
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
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP