Я нашел решение после некоторого расследования ;-).
Этот ресурс был очень полезен: https://github.com/tzyganu/Magento2SampleModule.
Пример модуля для этого решения находится здесь: https://github.com/nuclearhead/M2OverrideAction.
В результате, если вы перейдете к URI /customer/account/login
, будет запущен метод из пользовательского модуля вместо метода по умолчанию из модуля Magento_Customer
, а URL-адрес останется прежним. Конечно, вы можете сделать то же самое с действием loginPost
.
Я сделал это с переопределением класса Router
в di.xml
. Я упростил версию модуля SampleNews от tzyganu, чтобы прояснить решение. Класс Router
проверяет, какой URI возвращает метод $request->getPathInfo()
, а затем устанавливает новые конфиги в $request
:
$request->setModuleName('overrideaction')
->setControllerName('view')
->setActionName('index');
$request->setDispatched(true);
$this->dispatched = true;
return $this->actionFactory->create(
'Magento\Framework\App\Action\Forward',
['request' => $request]
);
etc/frontend/di.xml
моего пользовательского модуля:
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../lib/internal/Magento/Framework/ObjectManager/etc/config.xsd">
<type name="Magento\Framework\App\RouterList">
<arguments>
<argument name="routerList" xsi:type="array">
<item name="customer" xsi:type="array">
<item name="class" xsi:type="string">MiniSamples\OverrideAction\Controller\Router</item>
<item name="disable" xsi:type="boolean">false</item>
<item name="sortOrder" xsi:type="string">9</item>
</item>
</argument>
</arguments>
</type>
</config>
person
wit0ld
schedule
22.04.2015