Изменить URL перенаправления контроллера с плагином Magento 2 - PullRequest
1 голос
/ 06 февраля 2020

У меня перенаправление с контроллера, и я хочу изменить этот URL перенаправления внутри плагина.

Вот как это выглядит в настоящее время.

Контроллер:

        ...
        $this->messageManager->addSuccessMessage(__('Invitation to corporate account accepted.'));
        $this->corporateManagement->setCorporateSessionVars($customer->getId());

        return $this->_redirect($this->_url->getUrl('corporate/users'));

И Я хочу изменить это перенаправление, чтобы перенаправить на другой URL (должен быть с плагином). Вот как я пытался добиться этого с помощью плагина и работы плагина $ результат изменен, но пользователь по-прежнему перенаправлен на URL внутри контроллера, а не на тот, что из плагина.

Плагин:

    public function afterExecute(\Iways\Corporate\Controller\Invitation\Accept $subject, $result)
    {
        $corporateBranding = $this->corporateBrandingManagement->getCorporateBranding();

        if ($corporateBranding && $corporateBranding->getStoreGroupId()) {
            $storeGroup = $this->storeManager->getGroup($corporateBranding->getStoreGroupId());
            $store = $this->storeManager->getStore($storeGroup->getDefaultStoreId());
            $redirectUrl = $store->getBaseUrl().'corporate/users';
            $result = $this->redirect->getRedirect($redirectUrl);
        }

        return $result;
    }

Важное примечание: Все свойства и методы работают правильно, $ result заполняется другим перенаправлением и возвращается $ result, но пользователь перенаправляется на URL-адрес контроллера, а не на URL-адрес плагина.

1 Ответ

0 голосов
/ 08 февраля 2020

В этом случае вы можете попробовать использовать around вместо after. В общем и не возвращайте $ continue (), просто верните значение, которое вы используете в своем плагине.

Я не проверял это, но я считаю, что это должно работать.

    public function aroundExecute(\Iways\Corporate\Controller\Invitation\Accept $subject, $proceed)
    {
        $proceed();
        $corporateBranding = $this->corporateBrandingManagement->getCorporateBranding();

        if ($corporateBranding && $corporateBranding->getStoreGroupId()) {
            $storeGroup = $this->storeManager->getGroup($corporateBranding->getStoreGroupId());
            $store = $this->storeManager->getStore($storeGroup->getDefaultStoreId());
            $redirectUrl = $store->getBaseUrl().'corporate/users';
            $result = $this->redirect->getRedirect($redirectUrl);
        }

        return $result;
    }

...