I was trying to create an admin grid in the adminhtml trying to learn how they function and work and I ran into an issue following this guide: Mageplaza. I’ve been trying to debug where the issue is and, to the best of my knowledge I found that the issue lies somewhere in the core files of my module which are:
- di.xml
- layout files (or their name)
- menu.xml
- routes.xml
And here is my code, I am sharing mine because, of course, I made adjustments to the naming of the fields and the database fields.
Request/Price/Controller/Adminhtml/Blog/Index.php
<?php
namespace RequestPriceControllerAdminhtmlBlog;
use MagentoBackendAppAction;
use MagentoBackendAppActionContext;
use MagentoFrameworkViewResultPageFactory;
class Index extends Action
{
protected $resultPageFactory = false;
public function __construct(
Context $context,
PageFactory $resultPageFactory
)
{
parent::__construct($context);
$this->resultPageFactory = $resultPageFactory;
}
public function execute()
{
$resultPage = $this->resultPageFactory->create();
$resultPage->getConfig()->getTitle()->prepend((__('Posts')));
return $resultPage;
}
}
Request/Price/etc/adminhtml/menu.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Backend:etc/menu.xsd">
<menu>
<add id="Request_Price::menu"
title="Request Price" module="Request_Price"
sortOrder="10"
resource="Magento_Customer::customer"/>
<add id="Request_Price::menu_item"
title="Price Requests" module="Request_Price"
sortOrder="10" parent="Request_Price::menu"
action="request_price/create/index"
resource="Request_Price::menu_item"/>
</menu>
Request/Price/etc/adminhtml/routes.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd">
<router id="admin">
<route id="request_price" frontName="request_price">
<module name="Request_Price"/>
</route>
</router>
</config>
Request/Price/etc/di.xml
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<type name="MagentoFrameworkViewElementUiComponentDataProviderCollectionFactory">
<arguments>
<argument name="collections" xsi:type="array">
<item name="request_price_listing_data_source" xsi:type="string">
RequestPriceModelResourceModelPriceCollection
</item>
</argument>
</arguments>
</type>
<virtualType name="RequestPriceModelResourceModelPriceCollection"
type="MagentoFrameworkViewElementUiComponentDataProviderSearchResult">
<arguments>
<argument name="mainTable" xsi:type="string">request_price</argument>
<argument name="resourceModel" xsi:type="string">RequestPriceModelResourceModelPrice</argument>
</arguments>
</virtualType>
</config>
Request/Price/Setup/InstallSchema.php
<?php
namespace RequestPriceSetup;
use MagentoFrameworkDBAdapterAdapterInterface;
use MagentoFrameworkDBDdlTable;
use MagentoFrameworkSetupInstallSchemaInterface;
use MagentoFrameworkSetupModuleContextInterface;
use MagentoFrameworkSetupSchemaSetupInterface;
use Zend_Db_Exception;
class InstallSchema implements InstallSchemaInterface
{
/**
* @throws Zend_Db_Exception
*/
public function install(SchemaSetupInterface $setup, ModuleContextInterface $context)
{
$installer = $setup;
$installer->startSetup();
if (!$installer->tableExists('request_price')) {
$table = $installer->getConnection()->newTable(
$installer->getTable('request_price')
)
->addColumn(
'request_id',
Table::TYPE_INTEGER,
null,
[
'identity' => true,
'nullable' => false,
'primary' => true,
'unsigned' => true,
],
'Request'
)
->addColumn(
'username',
Table::TYPE_TEXT,
255,
['nullable' => false],
'username'
)
->addColumn(
'email',
Table::TYPE_TEXT,
255,
['nullable' => false],
'Email '
)
->addColumn(
'message_area',
Table::TYPE_TEXT,
500,
['nullable' => true],
'Message'
)
->addColumn(
'Name',
Table::TYPE_TEXT,
255,
['nullable' => false],
'Name'
)
->addColumn(
'created_at',
Table::TYPE_TIMESTAMP,
null,
['nullable' => false, 'default' => Table::TIMESTAMP_INIT],
'Created At'
)
->addColumn(
'status',
Table::TYPE_TEXT,
255,
['nullable' => false],
'status'
)
->setComment('Request Table');
$installer->getConnection()->createTable($table);
$installer->getConnection()->addIndex(
$installer->getTable('request_price'),
$setup->getIdxName(
$installer->getTable('request_price'),
['username', 'email', 'message_area', 'Name'],
AdapterInterface::INDEX_TYPE_FULLTEXT
),
['username', 'email', 'message_area', 'Name'],
AdapterInterface::INDEX_TYPE_FULLTEXT
);
}
$installer->endSetup();
}
}
But I keep getting this error every time I try to access my menu item in my debug.log
[2021-10-10 12:20:48] main.DEBUG: Request validation failed for action “MagentoBackendControllerAdminhtmlIndexIndexInterceptor” {“exception”:”[object] (MagentoFrameworkAppRequestInvalidRequestException(code: 0): Invalid request received at D:Workmag6vendormagentomodule-backendAppRequestBackendValidator.php:176)”} []
This is my file system, just in case I got the name of something wrong
I Would appreciate your help, fellow Magento developers. Thanks in advance.