2016-03-24 4 views
1

Я использую Yii2 для своего сайта электронной коммерции.
Здесь я использую omnilight/yii2-shopping-cart, но я не уверен, почему он не сохраняет информацию о сеансе.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) { 
    } 
} 

Но когда я получаю журнал от 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 
} 

Пожалуйста, дайте мне знать, если у вас есть какие-либо советы.

ответ

0

Это происходит на моем локальном хосте, поскольку в моих настройках xampp сессия php была закрыта. Я не уверен, но, пытаясь понять это, он начал сохранять сеанс.

Я думаю, что он начал работать после того, как я изменил флаг session_auto_start на 1 в php.ini каталога xampp.

0

для 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

+0

Спасибо за ваш быстрый ответ. Я думал, что расширение будет обрабатывать сеанс открытым, поэтому я проверю его еще раз. Итак, вы имеете в виду, что мне нужно сначала открыть сеанс, прежде чем я вызову метод put? – fxpage

+0

и в чем причина, по которой я смог увидеть сеанс, имеет информацию о моем продукте, когда я получаю журнал с помощью метода var_dump? – fxpage

+0

может быть сессией непосредственно, но в этот момент я не помню точно. В любом случае вы можете увидеть это руководство для получения дополнительной информации http://www.yiiframework.com/doc-2.0/guide-runtime-sessions-cookies .html – scaisEdge

 Смежные вопросы

  • Нет связанных вопросов^_^