Magento 2 Rewrite Controller

Follow the below steps to rewrite controller

Step 1 : Create di.xml file

You can rewrite controller using preference. 

Open PHPCodez/First/etc/di.xml insert the following block of code inside <config> tag rewrite controller in Magento 2

<?xml version="1.0"?>
<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="PHPCodez\First\Controller\Account\Create" />
</config>

Step : Create new controller

Now create a file PHPCodez\First\Controller\Account\Create.php and inser the following code

<?php
namespace PHPCodez\First\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()
 {
 die('PHPCodez - Controller is overriden');
 
 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;
 }
}

Step 3 : Flush Cache

php bin/magento cache:flush

Now if you click on the option create an account the message ‘PHPCodez – Controller is overriden’ will be displayed on the screen.

Leave a Reply

Your email address will not be published. Required fields are marked *