Переопределение локального контроллера собственным новым локальным контроллером
Я добавил некоторые функции в модуль 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 и добавление его в конфигурацию, но ничего работает.
Кто-нибудь знает, что я здесь делаю не так? Большое спасибо тому, кто найдет ошибку(ошибки) в моих путях.
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>