Пользовательский контроллер администратора 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/

Я просто не понимаю, где я ошибаюсь, это на вкладке ссылки меню..?

Author: Lachezar Raychev, 2016-02-20

2 answers

  1. Дважды проверьте, чтобы убедиться, что все ваши файлы, папки и пространство имен указаны правильно.

  2. Включали ли вы следующие файлы:

    • /Gift/registration.php
    • /Подарок/композитор.json
    • /Gift/etc/module.xml

Используя предоставленную вами инструкцию, я воссоздал ваш модуль, и он работает, см. демонстрацию https://github.com/magepal/stackexchange/tree/develop/102629

Редактировать

После того, как вы сделаете некоторые исследование вот что я нашел. Как только вы скопируете модуль в правильную папку установки (т.Е./приложение/код), он автоматически установится (после запуска./bin/установка magento:обновление) независимо от того, соответствует ли структура папок имени модуля. Единственное, что его волнует, - это имя в "регистрации".php' и'etc/module.xml 'совпадения и все различные XML-файлы будут объединены (т.е. меню)

 4
Author: Renon Stewart, 2016-02-21 11:52:24

Оказывается, это была комбинированная проблема - это была моя вина и ошибка в ошибке регистрации модуля 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 часов на поиски этого... пока я не написал здесь, и пользователь не подтвердил, что мой код верен - тогда я был своей фатальной ошибкой, о которой система никогда не сообщала мне.

 0
Author: Lachezar Raychev, 2016-02-21 07:07:27