Передача данных из 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');
}