Magento 2 - Перенаправление пользователя на определенную страницу после регистрации
Я пишу наблюдателю, чтобы наблюдать за событием customer_register_success
, и запускаю следующие коды для перенаправления, но не удалось. Кто-нибудь может помочь?
$url = $this->url->getUrl('/');
$observer->getControllerAction()->getResponse()->setRedirect($url);
$this->logger->debug("Redirect to: {$url}");
3
1 answers
Я думаю, проблема в том, что ваше перенаправление происходит до перенаправления по умолчанию и, следовательно, не имеет эффекта. Вот модуль, который выполняет эту работу:
Структура каталогов модулей:
| registration.php
|
+---etc
| | di.xml
| | module.xml
| |
| \---frontend
| events.xml
|
+---Observer
| Register.php
|
\---Plugin
Redirect.php
Di.xml :
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<type name="Magento\Customer\Model\Account\Redirect">
<plugin name="NewAcctRedirectPlug" type="Your\Module\Plugin\Redirect" disabled="false" sortOrder="1"/>
</type>
</config>
Events.xml:
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
<event name="customer_register_success">
<observer name="custom_redirect_register_success" instance="Your\Module\Observer\Register" disabled="false"/>
</event>
</config>
Register.php:
<?php
namespace Your\Module\Observer;
use Magento\Framework\Event\ObserverInterface;
use Magento\Framework\Registry;
class Register implements ObserverInterface
{
protected $coreRegistry;
public function __construct(Registry $registry)
{
$this->coreRegistry = $registry;
}
public function execute(\Magento\Framework\Event\Observer $observer)
{
$this->coreRegistry->register('is_new_account', true);
}
}
Redirect.php:
<?php
namespace Your\Module\Plugin;
use Magento\Framework\Controller\ResultFactory;
use Magento\Framework\Registry;
use Magento\Framework\UrlInterface;
class Redirect
{
protected $coreRegistry;
protected $url;
protected $resultFactory;
public function __construct(Registry $registry, UrlInterface $url, ResultFactory $resultFactory)
{
$this->coreRegistry = $registry;
$this->url = $url;
$this->resultFactory = $resultFactory;
}
public function aroundGetRedirect ($subject, \Closure $proceed)
{
if ($this->coreRegistry->registry('is_new_account')) {
/** @var \Magento\Framework\Controller\Result\Redirect $result */
$result = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT);
$result->setUrl($this->url->getUrl('custom/path'));
return $result;
}
return $proceed();
}
}
Это работает, устанавливая флаг в основном реестре, когда происходит событие customer_register_success
, а затем проверяет это помечает и возвращает альтернативный путь перенаправления, когда вместо страницы "Моя учетная запись" по умолчанию запрашивается перенаправление для успешной аутентификации клиента. Надеюсь, это поможет.
19
Author: Aaron Allen, 2016-08-18 09:45:08