Я использую 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
}
Пожалуйста, дайте мне знать, если у вас есть какие-либо советы.
Спасибо за ваш быстрый ответ. Я думал, что расширение будет обрабатывать сеанс открытым, поэтому я проверю его еще раз. Итак, вы имеете в виду, что мне нужно сначала открыть сеанс, прежде чем я вызову метод put? – fxpage
и в чем причина, по которой я смог увидеть сеанс, имеет информацию о моем продукте, когда я получаю журнал с помощью метода var_dump? – fxpage
может быть сессией непосредственно, но в этот момент я не помню точно. В любом случае вы можете увидеть это руководство для получения дополнительной информации http://www.yiiframework.com/doc-2.0/guide-runtime-sessions-cookies .html – scaisEdge