要重写控制器,可以使用首选项来完成。这意味着您需要使用before属性在路由器配置中添加规则。
打开在Magento 2中的标签重写控制器Mageplaza/HelloWorld/etc/routes.xml
内插入以下代码块<config>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/ObjectManager/etc/config.xsd">
<router id="standard">
<route id="mageplaza" frontName="hello">
<module name="Mageplaza_HelloWorld" before="Magento_Customer" />
</route>
</router>
</config>
这将使用您的控制器代码完全更改controller/action
模块Magento_Customer
,因此您应该扩展重写控制器并对您想要的功能进行更改。此外,模块中的控制器和操作必须具有相同的名称并重写controller/action
。
创建Mageplaza/HelloWorld/etc/di.xml
并添加以下代码。
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<preference for="Magento\Customer\Controller\Account\Create" type="Mageplaza\HelloWorld\Controller\Account\Create" />
</config>
例如,如果要重写控制器:Magento\Customer\Controller\Account\Create.php
您必须注册上面的路由器并创建一个控制器:
NameSpace\ModuleName\Controller\Account\Create.php
Create.php文件的内容:
namespace Mageplaza\HelloWorld\Controller\Account;
use Magento\Customer\Model\Registration;
use Magento\Customer\Model\Session;
use Magento\Framework\View\Result\PageFactory;
use Magento\Framework\App\Action\Context;
class Create extends \Magento\Customer\Controller\AbstractAccount
{
/** @var Registration */
protected $registration;
/**
* @var Session
*/
protected $session;
/**
* @var PageFactory
*/
protected $resultPageFactory;
/**
* @param Context $context
* @param Session $customerSession
* @param PageFactory $resultPageFactory
* @param Registration $registration
*/
public function __construct(
Context $context,
Session $customerSession,
PageFactory $resultPageFactory,
Registration $registration
) {
$this->session = $customerSession;
$this->resultPageFactory = $resultPageFactory;
$this->registration = $registration;
parent::__construct($context);
}
/**
* Customer register form page
*
* @return \Magento\Framework\Controller\Result\Redirect|\Magento\Framework\View\Result\Page
*/
public function execute()
{
if ($this->session->isLoggedIn() || !$this->registration->isAllowed()) {
/** @var \Magento\Framework\Controller\Result\Redirect $resultRedirect */
$resultRedirect = $this->resultRedirectFactory->create();
$resultRedirect->setPath('*/*');
return $resultRedirect;
}
/** @var \Magento\Framework\View\Result\Page $resultPage */
$resultPage = $this->resultPageFactory->create();
return $resultPage;
}
}
如果您收到此错误消息:出于安全原因,默认情况下禁用异常打印