Session proměnná se neukládá

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
mfajfr
Člen | 26
+
0
-

Ahoj,
tvořím administraci eshopu a dělám košík přes session. Postupoval jsem dle kuchařky a session se mi ne a ne uložit.

Takhle to tvořím:

<?php
public function addToCartSubmit(BuyProductForm $form){
        $vars = array();
        $vars['idProvider'] = $this->getParameter('idProvider');

        $paginator = $this->getComponent('paginator');
        $vars['paginator-page'] = $paginator->page;

        $impPaginator = $this->getComponent('impPaginator');
        $vars['impPaginator-page'] = $impPaginator->page;

        $values = $form->getValues();

        if(false){
            //cookie cart
        }else{
            $buyCarts = $this->getSession('buyCarts');
            $buyCarts->setExpiration(0, 'buyCarts');
            if(!isset($buyCarts->cart[$vars['idProvider']]))$buyCarts->cart[$vars['idProvider']] = new SessionBuyCart (null, $this->_db);

            if(!$buyCarts->cart[$vars['idProvider']]->isExist($values->idProduct)){
                $buyCarts->cart[$vars['idProvider']]->addToCart($values);
            }
            else{
                $buyCarts->cart[$vars['idProvider']]->updateQuantity($values);
            }
        }


        $this->flashMessage('Zboží bylo přidáno do košíku.', 'ok');
        //$this->redirect('ProviderProduct:buy');
    }
?>

Takhle se to snažím dostat do šablony:

<?php
public function renderBuy($idProvider){
        if(false){

        }else{
            $buyCarts = $this->getSession('buyCarts');
            $this->template->buyCart = $buyCarts->cart[$idProvider];
        }
    }
?>

Pokud je lepší způsob jak to řešit, tak řekněte. Rád se poučím.

Předem díky za pomoc.

jiri.pudil
Nette Blogger | 1032
+
0
-

Co znamená „ne a ne uložit“? Skončí to chybou, nebo to projde, ale neuloží data?

Všiml jsem si jen, že špatně nastavuješ exspiraci. Druhý argument má být název proměnné, které exspiraci nastavuješ, takže v tvém případě by tam mělo být spíš cart než buyCarts, popřípadě vůbec nic (čímž se exspirace nastaví pro celou sekci):

$buyCarts->setExpiration(0);
mfajfr
Člen | 26
+
0
-

Proběhlo to bez přerušení, ale session s příslušným cart byla prázdná.
Opravil jsem expiraci a teď se dostane session do renderu, takže to je v pořádku.
Ovšem pokud odešlu formulář a if(!existuje už ten košík s příslušným id), tak mi ho vytvoří znovu.