Webkul
Services
Technologies Bagisto QloApps
iOS Android SAP BigCommerce Wix
Trusted by
Samsung Intel Toyota Walmart Disney Nokia Nestlé Decathlon
See all customers
Back to Top
DOC

Redirect to controller from observer in magento2

Redirect to controller from observer in magento2

Here I am going to explain, how you redirect to a controller/action from the observer.

Step 1. We need to create an events.xml file inside the etc/frontend/ then write the below code inside this file.

<event name="controller_action_predispatch_review">
        <observer name="catalog_review_enabled" instance="Company\Module\Observer\CustomObserver" />
</event>

Step 2. Create an observer file under app/code/Company/Observer/CustomObserver.php

In the following observer, I am redirecting review routes to 404 when the review module is disabled.

<?php
namespace Company\Module\Observer;

use Magento\Framework\Event\ObserverInterface;
use Magento\Framework\Exception\LocalizedException;
use Magento\Framework\Message\ManagerInterface;
use Magento\Store\Model\ScopeInterface;

class CustomObserver implements ObserverInterface
{
     /**
     * Configuration path to review active setting
     */
    const XML_PATH_REVIEW_ACTIVE = 'catalog/review/active';
    /**
     * @var \Magento\Framework\ObjectManagerInterface
     */
    protected $_objectManager;

    /**
     * @var \Magento\Framework\UrlInterface
     */
    protected $_urlInterface;
    
    /**
     * [__construct ]
     *
     * @param \Magento\Framework\ObjectManagerInterface $objectManager
     * @param \Magento\Framework\UrlInterface           $urlInterface
     */
    public function __construct(
        \Magento\Framework\ObjectManagerInterface $objectManager,
         ScopeConfigInterface $scopeConfig,
        \Magento\Framework\UrlInterface $urlInterface
    ) {
        $this->_objectManager = $objectManager;
        $this->scopeConfig = $scopeConfig;
        $this->_urlInterface = $urlInterface;
    }

    public function execute(\Magento\Framework\Event\Observer $observer)
    {
        
        if (!$this->scopeConfig->getValue(
            self::XML_PATH_REVIEW_ACTIVE,
            ScopeInterface::SCOPE_STORE
        )
        ) {
            $defaultNoRouteUrl = $this->scopeConfig->getValue(
                'web/default/no_route',
                ScopeInterface::SCOPE_STORE
            );
            $redirectUrl = $this->_urlInterface->getUrl($defaultNoRouteUrl);
            $observer->getControllerAction()
                ->getResponse()
                ->setRedirect($redirectUrl);
        }
    }
}
. . .

Leave a Comment

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


5 comments

  • Sn Jha
  • Anu Pahuja
  • ND
    • Pranjali Goel (Moderator)
    • Pranjali Goel (Moderator)
  • Back to Top

    Message Sent!

    If you have more details or questions, you can reply to the received confirmation email.

    Back to Home