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.

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

1 Answer 1

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.

1
  • You can mark it as solved if it worked for you. It'll help others. Commented Oct 10, 2018 at 17:15

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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