我想覆盖现有Magento/*
模块的Controller行为。我想创建自己的Magento/Customer/Controller/Account/LoginPost.php
-实现。
最佳答案
您可以为此使用Magento2's Plugins功能。
Magento使您能够更改或扩展任何行为
任何Magento类中的原始公共方法。您可以更改
创建扩展的原始方法的行为。这些
扩展使用Plugin
类,因此称为
插件。
将以下内容写入模块的app/code/YourNamespace/YourModule/etc/di.xml
文件中:
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<type name="Magento\Customer\Controller\Account\LoginPost">
<plugin name="yourModuleAccountLoginPost" type="YourNamespace\YourModule\Plugin\Customer\LoginPost" sortOrder="10" disabled="false"/>
</type>
</config>
创建一个名为
app/code/YourNamespace/YourModule/Plugin/Customer/LoginPost.php
的新文件,并在其中写入以下代码:<?php
namespace YourNamespace\YourModule\Plugin\Customer;
class LoginPost
{
public function aroundExecute(\Magento\Customer\Controller\Account\LoginPost $subject, \Closure $proceed)
{
// your custom code before the original execute function
$this->doSomethingBeforeExecute();
// call the original execute function
$returnValue = $proceed();
// your custom code after the original execute function
if ($returnValue) {
$this->doSomethingAfterExecute();
}
return $returnValue;
}
}
?>
同样,您也可以在上述类中使用
beforeExecute()
和afterExecute()
函数。请查看this link了解详细信息。关于magento2 - 如何在Magento2中覆盖Controller?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29654718/