Php Yii2购物车不';无法保存到会话

Php Yii2购物车不';无法保存到会话,php,ajax,yii,yii2,yii-extensions,Php,Ajax,Yii,Yii2,Yii Extensions,我正在将Yi2用于我的电子商务网站。 这里我使用的是omnilight/yii2购物车,但我不确定它为什么不保存到会话产品的信息 我使用ajax请求将我的产品放到购物车位置 function actionAddToCart() { $pid = $_REQUEST['pid']; $quantity = $_REQUEST['quantity']; $model = Product::findOne($pid); $model->quantity = $

我正在将Yi2用于我的电子商务网站。
这里我使用的是omnilight/yii2购物车,但我不确定它为什么不保存到会话产品的信息

我使用ajax请求将我的产品放到购物车位置

function actionAddToCart() {

    $pid = $_REQUEST['pid'];
    $quantity = $_REQUEST['quantity'];

    $model = Product::findOne($pid);
    $model->quantity = $quantity;

    if ($model) {
        // @@@ Add Cookie Data here
        $cart = \Yii::$app->cart;

        $params = [];
        $params['price'] = $model->price;
        $params['quantity'] = $quantity;

        $cartPosition = $model->getCartPosition($params);

        $cart->put($cartPosition, $quantity);

        // var_dump($cart);
        // die();

        return $this->renderAjax('productView', [
            'product' => $model
        ]);
    }
}
当我在这里获得购物车日志时,我可以看到产品已添加到会话中。
但是在加载productView之后,我发现会话中没有产品

任何帮助都将不胜感激

这里我使用的是CartPositionInterface,它的参数包括id、价格、颜色、大小、长度和数量。 购物车返回以下结果:

object(yz\shoppingcart\ShoppingCart)#109 (6) {
  ["storeInSession"]=>
  bool(true)
  ["session"]=>
  object(yii\web\Session)#58 (6) {
    ["flashParam"]=>
    string(7) "__flash"
    ["handler"]=>
    NULL
    ["_cookieParams":"yii\web\Session":private]=>
    array(1) {
      ["httponly"]=>
      bool(true)
    }
    ["_hasSessionId":"yii\web\Session":private]=>
    bool(true)
    ["_events":"yii\base\Component":private]=>
    array(0) {
    }
    ["_behaviors":"yii\base\Component":private]=>
    NULL
  }
  ["cartId"]=>
  string(23) "myshoppingCart"
  ["_positions":protected]=>
  array(1) {
    ["404c11b84c06bda0bf7464d5fdc85604"]=>
    object(common\models\ProductCartPosition)#111 (7) {
      ["_product":protected]=>
      NULL
      ["id"]=>
      int(1)
      ["price"]=>
      float(250)
      ["color"]=>
      string(1) "1"
      ["size"]=>
      string(1) "L"
      ["length"]=>
      string(2) "56"
      ["quantity"]=>
      string(1) "1"
    }
  }
  ["_events":"yii\base\Component":private]=>
  array(0) {
  }
  ["_behaviors":"yii\base\Component":private]=>
  array(0) {
  }
}
object(yz\shoppingcart\ShoppingCart)#49 (6) {
  ["storeInSession"]=>
  bool(true)
  ["session"]=>
  object(yii\web\Session)#52 (6) {
    ["flashParam"]=>
    string(7) "__flash"
    ["handler"]=>
    NULL
    ["_cookieParams":"yii\web\Session":private]=>
    array(1) {
      ["httponly"]=>
      bool(true)
    }
    ["_hasSessionId":"yii\web\Session":private]=>
    NULL
    ["_events":"yii\base\Component":private]=>
    array(0) {
    }
    ["_behaviors":"yii\base\Component":private]=>
    NULL
  }
  ["cartId"]=>
  string(23) "aljazeera_shopping_cart"
  ["_positions":protected]=>
  array(0) {
  }
  ["_events":"yii\base\Component":private]=>
  array(0) {
  }
  ["_behaviors":"yii\base\Component":private]=>
  NULL
}
但当我从productView获取日志时,它返回以下结果:

object(yz\shoppingcart\ShoppingCart)#109 (6) {
  ["storeInSession"]=>
  bool(true)
  ["session"]=>
  object(yii\web\Session)#58 (6) {
    ["flashParam"]=>
    string(7) "__flash"
    ["handler"]=>
    NULL
    ["_cookieParams":"yii\web\Session":private]=>
    array(1) {
      ["httponly"]=>
      bool(true)
    }
    ["_hasSessionId":"yii\web\Session":private]=>
    bool(true)
    ["_events":"yii\base\Component":private]=>
    array(0) {
    }
    ["_behaviors":"yii\base\Component":private]=>
    NULL
  }
  ["cartId"]=>
  string(23) "myshoppingCart"
  ["_positions":protected]=>
  array(1) {
    ["404c11b84c06bda0bf7464d5fdc85604"]=>
    object(common\models\ProductCartPosition)#111 (7) {
      ["_product":protected]=>
      NULL
      ["id"]=>
      int(1)
      ["price"]=>
      float(250)
      ["color"]=>
      string(1) "1"
      ["size"]=>
      string(1) "L"
      ["length"]=>
      string(2) "56"
      ["quantity"]=>
      string(1) "1"
    }
  }
  ["_events":"yii\base\Component":private]=>
  array(0) {
  }
  ["_behaviors":"yii\base\Component":private]=>
  array(0) {
  }
}
object(yz\shoppingcart\ShoppingCart)#49 (6) {
  ["storeInSession"]=>
  bool(true)
  ["session"]=>
  object(yii\web\Session)#52 (6) {
    ["flashParam"]=>
    string(7) "__flash"
    ["handler"]=>
    NULL
    ["_cookieParams":"yii\web\Session":private]=>
    array(1) {
      ["httponly"]=>
      bool(true)
    }
    ["_hasSessionId":"yii\web\Session":private]=>
    NULL
    ["_events":"yii\base\Component":private]=>
    array(0) {
    }
    ["_behaviors":"yii\base\Component":private]=>
    NULL
  }
  ["cartId"]=>
  string(23) "aljazeera_shopping_cart"
  ["_positions":protected]=>
  array(0) {
  }
  ["_events":"yii\base\Component":private]=>
  array(0) {
  }
  ["_behaviors":"yii\base\Component":private]=>
  NULL
}

如果您有任何建议,请告诉我。

对于SessionOne,您应该使用

$session = new Session;
$session->open();
$value1 = $session['name1'];  // get session variable 'name1'
$value2 = $session['name2'];  // get session variable 'name2'
foreach ($session as $name => $value) // traverse all session variables
$session['name3'] = $value3;  // set session variable 'name3'

请参阅此参考文件。

了解您应该使用的SessionOne

$session = new Session;
$session->open();
$value1 = $session['name1'];  // get session variable 'name1'
$value2 = $session['name2'];  // get session variable 'name2'
foreach ($session as $name => $value) // traverse all session variables
$session['name3'] = $value3;  // set session variable 'name3'

请参阅此参考。

这发生在我的本地主机上,因为在我的xampp设置中,php会话已关闭。 我不确定,但在试图弄清楚之后,它开始保存会话


我认为它是在我将xampp目录的php.ini中的session_auto_start标志更改为1后开始工作的

这发生在我的本地主机上,因为在我的xampp设置中,php会话已关闭。 我不确定,但在试图弄清楚之后,它开始保存会话


我认为它是在我将xampp目录的php.ini中的session_auto_start标志更改为1后开始工作的

谢谢你的快速回复。我以为扩展将处理打开的会话,所以我将再次检查它。那么你的意思是我必须在调用put方法之前先打开会话?当我使用var_dump方法获取日志时,我能够看到会话中有我的产品信息的原因是什么?可能是会话直接起作用,但在这一刻我记不清了。。无论如何,你可以查看本指南了解更多信息。我已经更新了我的问题,请检查它,如果你有任何建议,请告诉我。谢谢你的快速回复。我以为扩展将处理打开的会话,所以我将再次检查它。那么你的意思是我必须在调用put方法之前先打开会话?当我使用var_dump方法获取日志时,我能够看到会话中有我的产品信息的原因是什么?可能是会话直接起作用,但在这一刻我记不清了。。无论如何,你可以看到这个指南了解更多信息,我已经更新了我的问题,请检查它,如果你有任何建议,请让我知道。