Пользовательский контроллер администратора Magento2 всегда перенаправляет на страницу индекса администратора
Я создал пользовательское расширение в панели администратора в меню продуктов. Проблема в том, что я не могу заставить контроллер работать. Код в виде паров:
В etc/adminhtml/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="Vendor_Gift::Gift" title="Gifts" module="Vendor_Gift" parent="Magento_Catalog::inventory" action="gift/gift/" resource="Vendor_Gift::gift"/>
</menu>
</config>
-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="gift" frontName="gift">
<module name="Vendor_Gift" />
</route>
</router>
</config>
-в Vendor/Gift/Controller/Adminhtml/Gift/Index.php
<?php
namespace Vendor\Gift\Controller\Adminhtml\Gift;
class Index extends \Magento\Backend\App\Action
{
public function execute()
{
die('dd');
}
}
Сгенерированная ссылка в меню Подарки является: http://77.81.188.106/admin/gift/gift/index/key/bc29dbd2656f4c8c13599c4c63e1485afd9ffc3440fe4f9d9ceec8171b03d87a/
Я просто не понимаю, где я ошибаюсь, это на вкладке ссылки меню..?
2 answers
Дважды проверьте, чтобы убедиться, что все ваши файлы, папки и пространство имен указаны правильно.
-
Включали ли вы следующие файлы:
- /Gift/registration.php
- /Подарок/композитор.json
- /Gift/etc/module.xml
Используя предоставленную вами инструкцию, я воссоздал ваш модуль, и он работает, см. демонстрацию https://github.com/magepal/stackexchange/tree/develop/102629
Редактировать
После того, как вы сделаете некоторые исследование вот что я нашел. Как только вы скопируете модуль в правильную папку установки (т.Е./приложение/код), он автоматически установится (после запуска./bin/установка magento:обновление) независимо от того, соответствует ли структура папок имени модуля. Единственное, что его волнует, - это имя в "регистрации".php' и'etc/module.xml 'совпадения и все различные XML-файлы будут объединены (т.е. меню)
Оказывается, это была комбинированная проблема - это была моя вина и ошибка в ошибке регистрации модуля Magento 2.
Когда я впервые создал свой модуль, я перепутал имя папки модуля, поэтому вместо того, чтобы модуль был в Vendor/Gift, он был в Vendor/Gitf.
После запуска
php bin/magento setup:upgrade
Без выполнения команды
php bin/magento module:enable Vendor_Module
Затем возникла проблема. По-видимому, когда вы запускаете
php bin/magento setup:upgrade
Он проходит через каждую папку в
app/code/<all_the_vendors_folders>/<all_the_vendors_modules>
И если это найдите файл registration.php который регистрирует модуль, он, вероятно, проверяет только, объявлено ли имя модуля в etc/module.xml совпадает с тем, что в registration.php файл. Результатом этого является то, что модуль зарегистрирован правильно, но помещен в неправильную папку, для которой у вас нет абсолютно никакой информации, потому что php bin/magento setup:upgrade не выдал никаких ошибок и успешно зарегистрировал модуль. После этого все в моем коде модуля было правильно, но так как модуль находился в папке "Gitf" вместо "Подарка", ничего не работало, как ожидалось, но и никаких ошибок в нем не возникало. Так что - для любых новичков, будьте осторожны, я потратил около 3 часов на поиски этого... пока я не написал здесь, и пользователь не подтвердил, что мой код верен - тогда я был своей фатальной ошибкой, о которой система никогда не сообщала мне.