0

Hi I have created a module to view a form in the frontend. below is my code

/app/cod/TerrificMinds/Test/Block/Registration.php

<?php

namespace TerrificMinds\Test\Block;

class Registration extends \Magento\Framework\View\Element\Template
{
    /**
     * Construct
     *
     * @param \Magento\Framework\View\Element\Template\Context $context
     * @param array $data
     */
    public function __construct(
        \Magento\Backend\Block\Template\Context $context,
        array $data = []
    )
    {
        parent::__construct($context, $data);
       }

    /**
     * Get form action URL for POST booking request
     *
     * @return string
     */
    public function getFormAction()
    {

        return '/test/registration/save';

    }
}

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="test" frontName="test">
            <module name="TerrificMinds_Test"/>
        </route>
    </router>
</config>

etc/module.xml

<?xml version="1.0" ?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="TerrificMinds_Test" setup_version="1.0.1" active="true"/>
</config>

view/frontend/layout/test_index_index.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">
    <body>
        <referenceContainer name="content">
            <block class="TerrificMinds\Test\Block\Registration" name="test" template="TerrificMinds_Test::registration.phtml" cacheable="false"/>
        </referenceContainer>
    </body>
</page>

templates/registration.phtml

<h1>Booking page</h1>

<form action="<?php echo $block->getFormAction() ?>" method="post">
    <input name="firstname" type="text">
    <input name="lastname" type="text">
    <input name="phone" type="text">
    <input name="bookingTime" type="date">
    <input type="submit" value="Send booking informations">
</form>

registration.php

<?php
\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    'TerrificMinds_Test',
    __DIR__
);

Controller/Save.php

<?php

namespace TerrificMinds\Test\Controller\Registration;

use Magento\Framework\Controller\ResultFactory;

class Save extends \Magento\Framework\App\Action\Action
{
    /**
     * Booking action
     *
     * @return void
     */
    public function execute()
    {
        // 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();
    }
}

When I try to hit mysite/test/index/index its giving me 404 errorpage after setup upgrade,di compile and cache flushing. What could be the error I am making.Please help.

  • Have you created controller as well? without controller it won't work. – Ramkishan Suthar Oct 10 '18 at 16:55
  • i have updated qn with the controller . is this right way ? – Melvin Oct 10 '18 at 16:58
  • Please update it with index controller – Ramkishan Suthar Oct 10 '18 at 17:03
1

Make sure you have index controller at Vendor\Module\Controller\Index\Index.php and access it from test/index or test/index/index then you won't get any 404 error. Let me know if you still face this issue.

  • You can mark it as solved if it worked for you. It'll help others. – Ramkishan Suthar Oct 10 '18 at 17:15

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.