在 SilverStripe 中取消设置会话
Unset session in SilverStripe
我正在用 SilverStripe 构建一个非常简单的在线商店。我正在编写一个函数来从购物车中删除商品(在我的例子中是 order
)。
我的设置:
我的端点正在将 JSON 返回到视图以供在 ajax 中使用。
public function remove() {
// Get existing order from SESSION
$sessionOrder = Session::get('order');
// Get the product id from POST
$productId = $_POST['product'];
// Remove the product from order object
unset($sessionOrder[$productId]);
// Set the order session value to the updated order
Session::set('order', $sessionOrder);
// Save the session (don't think this is needed, but thought I would try)
Session::save();
// Return object to view
return json_encode(Session::get('order'));
}
我的问题:
当我 post 向这条路线发送数据时,产品被删除但只是暂时的,然后下次调用删除时,之前的项目又回来了。
示例:
订单对象:
{
product-1: {
name: 'Product One'
},
product-2: {
name: 'Product Two'
}
}
当我 post 删除 product-1
时,我得到以下信息:
{
product-2: {
name: 'Product Two'
}
}
这似乎有效,但后来我尝试删除 product-2
并得到这个:
{
product-1: {
name: 'Product One'
}
}
AB 之子回来了!当我取回整个购物车时,它仍然包含两者。
如何让 order
粘住?
您的期望是正确的,它应该适用于您编写的代码。但是,会话数据的管理方式不适用于删除数据,因为它不被视为状态更改。仅显示正在编辑的现有数据。如果您想了解更多,请参阅 Session::recursivelyApply()。
我知道的唯一方法是(不幸的是)在为 'order'
设置新值之前直接强调 textmanipulate $_SESSION
public function remove() {
// Get existing order from SESSION
$sessionOrder = Session::get('order');
// Get the product id from POST
$productId = $_POST['product'];
// Remove the product from order object
unset($sessionOrder[$productId]);
if (isset($_SESSION['order'])){
unset($_SESSION['order']);
}
// Set the order session value to the updated order
Session::set('order', $sessionOrder);
// Return object to view
return json_encode(Session::get('order'));
}
我正在用 SilverStripe 构建一个非常简单的在线商店。我正在编写一个函数来从购物车中删除商品(在我的例子中是 order
)。
我的设置:
我的端点正在将 JSON 返回到视图以供在 ajax 中使用。
public function remove() {
// Get existing order from SESSION
$sessionOrder = Session::get('order');
// Get the product id from POST
$productId = $_POST['product'];
// Remove the product from order object
unset($sessionOrder[$productId]);
// Set the order session value to the updated order
Session::set('order', $sessionOrder);
// Save the session (don't think this is needed, but thought I would try)
Session::save();
// Return object to view
return json_encode(Session::get('order'));
}
我的问题:
当我 post 向这条路线发送数据时,产品被删除但只是暂时的,然后下次调用删除时,之前的项目又回来了。
示例:
订单对象:
{
product-1: {
name: 'Product One'
},
product-2: {
name: 'Product Two'
}
}
当我 post 删除 product-1
时,我得到以下信息:
{
product-2: {
name: 'Product Two'
}
}
这似乎有效,但后来我尝试删除 product-2
并得到这个:
{
product-1: {
name: 'Product One'
}
}
AB 之子回来了!当我取回整个购物车时,它仍然包含两者。
如何让 order
粘住?
您的期望是正确的,它应该适用于您编写的代码。但是,会话数据的管理方式不适用于删除数据,因为它不被视为状态更改。仅显示正在编辑的现有数据。如果您想了解更多,请参阅 Session::recursivelyApply()。 我知道的唯一方法是(不幸的是)在为 'order'
设置新值之前直接强调 textmanipulate $_SESSIONpublic function remove() {
// Get existing order from SESSION
$sessionOrder = Session::get('order');
// Get the product id from POST
$productId = $_POST['product'];
// Remove the product from order object
unset($sessionOrder[$productId]);
if (isset($_SESSION['order'])){
unset($_SESSION['order']);
}
// Set the order session value to the updated order
Session::set('order', $sessionOrder);
// Return object to view
return json_encode(Session::get('order'));
}