Edited:
I am not sure why review_controller_product_init_before
. It is very strange to me. I have tried with redirection using Magento\Framework\Controller\ResultFactory
and want to failed.
So, for your case, you can use direct using
observer over controller_action_predispatch_review_product_post
OR, You can create redirection using plugin over Magento\Review\Controller\Product\Post:execute
I have chosen the observer for your requirement.
Observer Class look Like:
<?php
namespace {VendorName}\{ModuelName}\Observer;
use Magento\Framework\Event\Observer;
use Magento\Framework\Event\ObserverInterface;
class RedirectfromPostObserver implements ObserverInterface {
/**
* @var \Magento\Framework\App\ActionFlag
*/
private $actionFlag;
/**
* @var \Magento\Framework\App\Action\Context
*/
private $context;
/**
* @var \Magento\Framework\App\Response\RedirectInterface
*/
private $redirect;
/**
* @var \Magento\Framework\Message\ManagerInterface
*/
private $manager;
public function __construct(
\Magento\Framework\App\Response\RedirectInterface $redirect,
\Magento\Framework\Message\ManagerInterface $manager,
\Magento\Framework\App\ActionFlag $actionFlag
) {
$this->redirect = $redirect;
$this->manager = $manager;
$this->actionFlag = $actionFlag;
}
public function execute(Observer $observer) {
$controllerAction = $observer->getEvent()->getControllerAction();
$currentActionName = $controllerAction->getRequest()->getActionName();
$nickname = $controllerAction->getRequest()->getParam('nickname', false);
$title = $controllerAction->getRequest()->getParam('title', false);
$detail = $controllerAction->getRequest()->getParam('detail', false);
$ratings = $controllerAction->getRequest()->getParam('ratings', false);
$sometest = true;
if ($sometest === true) {
$this->manager->addErrorMessage(__("you have an error in your string %1",
$controllerAction->getRequest()->getParam('nickname')));
$controllerAction->getResponse()->setRedirect($this->redirect->getRefererUrl());
$this->actionFlag->set('', \Magento\Framework\App\Action\Action::FLAG_NO_DISPATCH, true);
$this->redirect->redirect($controllerAction->getResponse(), $this->redirect->getRefererUrl());
}
}
}