【问题标题】:Yii2 shopping cart doesn't save to sessionYii2 购物车不保存到会话
【发布时间】:2016-03-24 12:05:05
【问题描述】:

我正在为我的电子商务网站使用 Yii2。
这里我使用的是omnilight/yii2-shopping-cart,但我不确定它为什么不保存到会话产品的信息中。

我已使用 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) {
  }
}

但是当我从 productView 获取日志时,它会返回以下结果:

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
}

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

【问题讨论】:

    标签: php ajax yii yii2 yii-extensions


    【解决方案1】:

    你应该使用 sessione

    $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'
    

    请参阅此内容以获取参考。 http://www.yiiframework.com/doc-2.0/yii-web-session.html

    【讨论】:

    • 感谢您的快速回复。我认为扩展程序会处理打开的会话,所以我会再次检查它。所以你的意思是在调用 put 方法之前我必须先打开会话?
    • 当我使用 var_dump 方法获取日志时,我能够看到会话中有我的产品信息的原因是什么?
    • 可能是会话直接工作,但在这一刻我不记得确切..无论如何,您可以查看本指南以获取更多信息yiiframework.com/doc-2.0/guide-runtime-sessions-cookies.html
    • 我已经更新了我的问题,请检查一下,如果您有任何建议,请告诉我。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-04
      • 1970-01-01
      • 2021-12-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-29
      相关资源
      最近更新 更多