Передача данных из preDispatch в контроллер

У меня есть пользовательская форма на странице корзины, где пользователи могут вводить специальные коды. Чтобы убедиться, что пользователь вошел в систему, я включил метод preDispatch в контроллер.

public function preDispatch() {
    parent::preDispatch();

    $action = $this->getRequest()->getActionName();
    $loginUrl = Mage::helper('customer')->getLoginUrl();

    if (!Mage::getSingleton('customer/session')->authenticate($this, $loginUrl)) {
        $this->_getCoreSession()->addSuccess('Sie müssen sich einloggen oder ein Benutzerkonto erstellen um Ihren Gutschein zu aktivieren.');
        $this->setFlag('', self::FLAG_NO_DISPATCH, true);
    }
}

Преддиспетчер работает. Когда пользователь вводит код и не входит в систему, он перенаправляется на страницу входа и после успешного входа возвращается в корзину. Теперь функция, обрабатывающая сообщение со значением формы, не получает ввод. Я получаю входные данные следующим образом:

public function activateGiftCardCreditAction() {
    // action handles post request when customer activates gift card

    $giftCardCode = trim((string)$this->getRequest()->getParam('giftcardcredit_code'));
    $amount = (float)$this->getRequest()->getParam('giftcard_amount');
    $card = Mage::getModel('giftcards/giftcards')->load($giftCardCode, 'card_code');

    // do something with form values ...

    $this->_redirect('checkout/cart');
}

Как я могу передать значения формы через страницу входа?

1 ответ

Решение

Как идея сохранить данные поста в переменной сеанса в preDispatch()

    Mage::getSingleton('customer/session')->
setBeforeGiftCardRequest($this->getRequest()->getPost());

а затем опубликовать данные из этой переменной сеанса

    /* add this code */
     $session = Mage::getSingleton('customer/session');
    $requestParams = $this->getRequest()->getParams();
    if ($session->getBeforeGiftCardRequest()) {
        $requestParams = $session->getBeforeGiftCardRequest();
        $session->unsBeforeGiftCardRequest();
    }

Итак, давайте попробуем:

 public function preDispatch() {
    parent::preDispatch();

    $action = $this->getRequest()->getActionName();
    $loginUrl = Mage::helper('customer')->getLoginUrl();

    if (!Mage::getSingleton('customer/session')->authenticate($this, $loginUrl)) {
        $this->_getCoreSession()->addSuccess('Sie müssen sich einloggen oder ein Benutzerkonto erstellen um Ihren Gutschein zu aktivieren.');
  // Assign post value in customer/session variable 
   Mage::getSingleton('customer/session')->setBeforeGiftCardRequest($this->getRequest()->getParams());
        $this->setFlag('', self::FLAG_NO_DISPATCH, true);
    }
}

а также

public function activateGiftCardCreditAction() {
 
    /* add this code */
    $session = Mage::getSingleton('customer/session');
            $requestParams = $this->getRequest()->getParams();
            if ($session->getBeforeGiftCardRequest()) {
                $requestParams = $session->getBeforeGiftCardRequest();
                $session->unsBeforeGiftCardRequest();
            }
    // action handles post request when customer activates gift card

    $giftCardCode = trim((string)$this->getRequest()->getParam('giftcardcredit_code'));
    $amount = (float)$this->getRequest()->getParam('giftcard_amount');
    $card = Mage::getModel('giftcards/giftcards')->load($giftCardCode, 'card_code');

    // do something with form values ...

    $this->_redirect('checkout/cart');
}

Другие вопросы по тегам