Переопределение локального контроллера собственным новым локальным контроллером


Я добавил некоторые функции в модуль Amasty_Xcoupon, но после обновления с версии 1.1.6 до версии 1.1.6 пул кодов модуля изменился с сообщества на локальный. Это каким-то образом приводит к тому, что мой контроллер больше не работает (страница 404).

Примечание: Я обновил имена классов, и все остальное отлично работает. Кроме того, я знаю, что здесь были опубликованы аналогичные вопросы, но упомянутые там решения не сработали для меня (или я немного напортачил больше).

Вот оригинальный переписанный контроллер (который работал, когда модуль был в пуле кода сообщества):

// src/app/code/local/My/Extension/controllers/Adminhtml/ReportController.php
class My_Extension_Adminhtml_ReportController extends Amasty_Xcoupon_Adminhtml_ReportController
{
    // code here
}

Более старый файл был расположен в src/app/code/сообщество/Amasty/Xcoupon/controllers/Adminhtml/ReportController.php, более новый расположен в src/app/code/local/Amasty/Xcoupon/controllers/Adminhtml/Amxcoupon/ReportController.php.

Это обновленный контроллер:

class My_Extension_Adminhtml_ReportController extends Amasty_Xcoupon_Adminhtml_Amxcoupon_ReportController
{
    // code here
}

В config.xml похоже на это:

<config>
    <admin>
        <routers>
            <adminhtml>
                <args>
                    <modules>
                        <My_Extension before="Mage_Adminhtml">My_Extension_Adminhtml</My_Extension>
                    </modules>
                </args>
            </adminhtml>
        </routers>
    </admin>
</config>

Это работало с предыдущей версией, но теперь в новой версии при выполнении функции я перехожу на красивую страницу 404, поэтому мой контроллер больше не найден.

Я пытался использовать require_once для получения исходного контроллера, но безуспешно. Также попытался изменить конфигурацию следующим образом:

<config>
    <admin>
        <routers>
            <adminhtml>
                <args>
                    <modules>
                        <My_Extension before="Amasty_Xcoupon">My_Extension_Adminhtml</My_Extension>
                    </modules>
                </args>
            </adminhtml>
        </routers>
    </admin>
</config>

А также добавление ранее не существовавшего каталога Amxcoupon в каталог controllers/Adminhtml и добавление его в конфигурацию, но ничего работает.

Кто-нибудь знает, что я здесь делаю не так? Большое спасибо тому, кто найдет ошибку(ошибки) в моих путях.

Author: Nico V, 2017-01-19

1 answers

После еще нескольких проб и ошибок я нашел способ, который сработал.

Сначала мне пришлось добавить зависимость в мои модули, например:

<config>     
    <modules>
        <My_Extension>
            <active>true</active>
            <codePool>local</codePool>
            <depends>
                <Amasty_Xcoupon/>
            </depends>
        </My_Extension>
    </modules>
</config>

Я также заменил My/Extension/controller/Adminhtml/ReportController.php чтобы My/Extension/Adminhtml/Amasty/Amxcoupon/ReportController.php чтобы соответствовать новой файловой структуре модуля.

В последнюю очередь мне нужно было изменить перезапись маршрутизатора, вот так:

<config>
    <admin>
        <routers>
            <adminhtml>
                <args>
                    <modules>
                        <My_Extension before="Amasty_Xcoupon_Adminhtml">My_Extension_Adminhtml_Amasty</My_Extension>
                    </modules>
                </args>
            </adminhtml>
        </routers>
    </admin>
</config>
 0
Author: Nico V, 2017-01-23 07:39:36