Magento 2: как перенаправить с контроллера администратора
В Magento 1 мы смогли выполнить следующее непосредственно в методе действия контроллера:
$this->_redirect('*/*/index');
Или в более общем виде:
$this->_redirect('adminhtml/controller/action');
Какой эквивалент в Magento 2?
2 answers
Чтобы выполнить следующее в Magento 2, вы должны выполнить следующее в своем методе execute
:
public function execute()
{
/* Do your controller action stuff here */
$resultRedirect = $this->resultRedirectFactory->create();
$resultRedirect->setPath('adminRouteFrontName/controllerFolder/actionClass');
return $resultRedirect;
}
Вам не нужно добавлять \Magento\Framework\Controller\Result\RedirectFactory
в свой конструктор, так как он уже объявлен в абстрактном классе Magento\Framework\App\Action\AbstractAction
, поэтому у вас уже есть доступ к переменной $this->resultRedirectFactory
.
Параметры в моем примере следующие:
-
Имя интерфейса администратора: объявлено в вашем
adminhtml/routes.xml
-
Папка-контроллер: имя папки контроллера под
Controller/Adminhtml
-
Класс действий: имя вашего класса действий в папке контроллера, например, с
Index.php
это будетindex
, дляGrid.php
это будетgrid
и так далее.
Вы также можете по-прежнему использовать *
, как мы делали в M1.
Вы также можете использовать параметры, например, такие:
$resultRedirect->setPath('catalog/*/', ['store' => $storeId, '_current' => true, 'id' => $id]);
Я просто хочу добавить, что Ваш вопрос и Ваш ответ работают на меня:). Я искал простой метод перенаправления и случайно обнаружил, что старый метод (из Mage 1) все еще поддерживается в Mage 2, я использовал следующий код для перенаправления с моего пользовательского контроллера на сетку продуктов, и это сработало:)
$this->_redirect('catalog/product/index'); return;
Я не уверен, будет ли это поддерживаться позже или нет, но об этом стоило упомянуть:)