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 implementMagento\Framework\App\Action\Http<method>ActionInterface
where is one of HTTP Request methods. Magento usesMagento\Framework\App\Request\CompositeValidator
to validate requests, on validation error you getRequest 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:
and the url:
http://127.0.0.1/<my_route>?isAjax=true
request method POST