/ / Yii2 vytvára novú reláciu namiesto otvorenia existujúcich - php, session, yii, yii2

Yii2 vytvára novú reláciu namiesto otvorenia existujúcich - php, session, yii, yii2

Pracujem na jednoduchej logike ukladania môjho nákupného košíka v relácii s využitím Yii2 natívneho yiiwebSession, Pri každom pridaní položky do košíka volám metódu:

public function actionAdd( ) {

$id = Yii::$app->request->get("id");
$product = Product::findOne($id);

$session = Yii::$app->session;
$session->open();

$cart = new Cart();
$cart->addToCart($product);

$this->layout = false;
return $this->render("cart-modal", compact("session"));
}

táto metóda pracuje s modelom košíka a pridá moje položky do relácie:

public function addToCart($product, $qty = 1) {

if(isset($_SESSION["cart"][$product->id])) {
$_SESSION["cart"][$product->id]["qty"] += $qty;
} else {
$_SESSION["cart"][$product->id] = [
"qty" => $qty,
"title" => $product->title,
"price" => $product->price,
"image" => $product->image,
];
}
}

a všetko ide dobre, kým sa nepokúnamim pridať inú položku. Potom Yii namiesto otvorenia existujúcej relácie vytvorí novú s tou poslednou položkou, ktorú som pridal. Aký môže byť dôvod tohto druhu správania?

Pracujem na lokálnom serveri OpenServer a nemusím meniť žiadne nastavenia, ktoré by mohli súvisieť s reláciami.

odpovede:

2 pre odpoveď č. 1

V zásade nepoužívate session vôbec. Zmeňte svoj kód na:

public function actionAdd( ) {

$id = Yii::$app->request->get("id");
$product = Product::findOne($id);

// REMOVE THIS
// session is started automatically when using component
// $session = Yii::$app->session;
// $session->open();

$cart = new Cart();
$cart->addToCart($product);

$this->layout = false;
return $this->render("cart-modal", compact("session"));
}

public function addToCart($product, $qty = 1) {

$session = Yii::$app->session;
if ($session->has("cart")) {
$cart = $session["cart"]; // you can not modify session subarray directly
} else {
$cart = [];
}
if(isset($cart[$product->id])) {
$cart[$product->id]["qty"] += $qty;
} else {
$cart[$product->id] = [
"qty" => $qty,
"title" => $product->title,
"price" => $product->price,
"image" => $product->image,
];
}
$session->set("cart", $cart);
}

Dúfam, že to pomôže. Ak nie, znamená to, že problém je niekde inde, ale napriek tomu by ste mali používať session správne.


1 pre odpoveď č. 2

Ok, myslel som si, problém bol s mojím serverom, hneď ako som sa presťahoval do VPS, tento problém prestal.