Magento – main.DEBUG: Request validation failed for action “Magento\Framework\App\Action\Forward\Interceptor” [] []

magento2

I add a custom module , it has a backend manager,when i add a menu in backend,302 errors
menu.xml

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Backend:etc/menu.xsd">
    <menu>
        <add id="Magezoom_Adminmenu::adminmenu" module="Magezoom_Adminmenu" title="Magezoom" translate="title"  sortOrder="999"  resource="Magezoom_Adminmenu::adminmenu"/>
        <add id="Magezoom_Navigation::setting" title="Design" translate="title" module="Magezoom_Navigation" sortOrder="20" parent="Magezoom_Adminmenu::adminmenu" resource="Magezoom_Adminmenu::adminmenu"/>
        <add id="Magezoom_Navigation::navigation" title="Navigation" translate="title" module="Magezoom_Navigation" sortOrder="20" parent="Magezoom_Navigation::setting" resource="Magezoom_Adminmenu::adminmenu"  action="adminhtml/navigation" />
    </menu>
</config>

routes.xml

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd">
    <router id="admin">
        <route id="navigation" frontName="navigation">
            <module name="Magezoom_Navigation" />
        </route>
    </router>
</config>

controller Index.php

<?php
namespace Magezoom\Navigation\Controller\Adminhtml\Index;

  class Index extends \Magento\Backend\App\Action
  {
    /**
    * @var \Magento\Framework\View\Result\PageFactory
    */
    protected $resultPageFactory;

    /**
     * Constructor
     *
     * @param \Magento\Backend\App\Action\Context $context
     * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
     */
    public function __construct(
        \Magento\Backend\App\Action\Context $context,
        \Magento\Framework\View\Result\PageFactory $resultPageFactory
    ) {
         parent::__construct($context);
         $this->resultPageFactory = $resultPageFactory;
    }

    /**
     * Load the page defined in view/adminhtml/layout/exampleadminnewpage_helloworld_index.xml
     *
     * @return \Magento\Framework\View\Result\Page
     */
    public function execute()
    {
         return  $resultPage = $this->resultPageFactory->create();
    }
  }
?>

debug.log

about 10 times

main.DEBUG: Request validation failed for action "Magento\Framework\App\Action\Forward\Interceptor" [] []

url become this:

http://magento-dev.com/admin/admin/navigation/index/key/a94a1b0e9c7dfd64a3f6cf422d5381deac7111115166375a4107dbd10c71c773/adminhtml/adminhtml/adminhtml/adminhtml/adminhtml/adminhtml/adminhtml/adminhtml/adminhtml/adminhtml/adminhtml/adminhtml/adminhtml/adminhtml/adminhtml/adminhtml/adminhtml/adminhtml/adminhtml/dashboard

Best Answer

First things first, controller action should extend Magento\Framework\App\Action\Action class and implement Magento\Framework\App\Action\Http<method>ActionInterface where is one of HTTP Request methods. Magento uses Magento\Framework\App\Request\CompositeValidator to validate requests, on validation error you get Request validation failed for action ...

To address your issue you need to pinpoint validator that failed. In my case (with was a POST controller retrieving a data from another service) my request lacked a param isAjax = true, when I added this param to the URL (like so: http://127.0.0.1/<my_route>?isAjax=true) it solved my problem. In your case, it might be another validator so the solution is not universal.

Validators that take part in validating POST requests are:

Magento\Framework\App\Request\CsrfValidator and Magento\Framework\App\Request\HttpMethodValidator

Summarising:

class <MethodName> extends Magento\Framework\App\Action\Action implements Magento\Framework\App\Action\HttpPostActionInterface
{
    public function execute(): \Magento\Framework\Controller\ResultInterface|ResponseInterface
    {
        return $this->resultFactory->create();
    }
}

and the url: http://127.0.0.1/<my_route>?isAjax=true request method POST

Related Topic