Problém so sessions – prepisovanie, nakupny kosik
- johnnie
- Člen | 54
Ahojte,
Rozhodol som sa naprogramovať si nakupný košík v nette, používam quickstart blog aplikáciu akurát som si to rozšíril o produkty. Zasekol som sa pri nasledovnom kóde
Do tejto funkcie si posielam formulár v ktorom si vlastne môžem meniť množstvo produktov v nákupnom košíku, keď chcem kúpiť jeden produkt napr. a 2ks.
private function updateCart($form)
{
$session = $this->getSession('cart')->items;
foreach($form->values as $key => $quantity) {
$key = explode("_", $key);
$key = $key[1];
echo "Id produktu : ".$key;
echo "Prev:".$session[$key]['quantity'];
unset($session[$key]['quantity']);
$session[$key]['quantity'] = (int)$quantity;
echo "Now:".$session[$key]['quantity'];
die();
}
}
Output je vlastne nasledovný (tvári sa že všetko funguje)
Id produktu : 1
Prev:4
Now:12
Tracy ukazuje
cart => array (3)
items => array (2)
1 => array (2)
id => 1
quantity => 4
2 => array (2)
id => 2
quantity => 1
Už podľa tracy je videť že mi to session naozaj neprepísalo aj keď pri kontrolonom echu sa to tvári že ju naozaj prepísalo, skúšal som už naozaj všetko a možno je tam len maličká chyba ktorú už nevidím tak skúšam požiadať o pomoc ešte Vás.
Editoval johnnie (23. 8. 2015 21:31)
- duke
- Člen | 650
Problém je nejspíš už v řádku:
$session = $this->getSession('cart')->items;
Nyní je totiž v proměnné $session kopie položky items, nikoli sama položka items. Proto jakákoli změna proměnné nemá na session vliv.
Řešením je buď použít přiřazení reference:
$session =& $this->getSession('cart')->items;
… nebo přiřazovat přímo položce session:
$this->getSession('cart')->items[$key]['quantity'] = (int) $quantity;