Tôi đang xây dựng một cửa hàng trực tuyến khá đơn giản trong SilverStripe. Tôi đang viết một chức năng để xóa một mục khỏi giỏ hàng (order
trong trường hợp của tôi).Bỏ đặt phiên trong SilverStripe
thiết lập của tôi:
endpoint của tôi là trở về JSON để quan điểm để sử dụng trong 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'));
}
Vấn đề của tôi:
Khi tôi gửi dữ liệu đến tuyến đường này, các sản phẩm được gỡ bỏ, nhưng chỉ tạm thời, sau đó lần sau remove được gọi, mục trước đã trở lại.
Ví dụ:
đối tượng theo thứ tự:
{
product-1: {
name: 'Product One'
},
product-2: {
name: 'Product Two'
}
}
Khi tôi gửi để loại bỏ product-1
tôi nhận được như sau:
{
product-2: {
name: 'Product Two'
}
}
Mà dường như đã làm việc nhưng sau đó tôi cố gắng và loại bỏ product-2
và nhận được điều này:
{
product-1: {
name: 'Product One'
}
}
SON OF A B đã hoạt động trở lại! Khi tôi lấy toàn bộ giỏ hàng, nó vẫn chứa cả hai.
Làm cách nào để nhận được order
để kết nối?
Ah bugger! Tôi nghĩ rằng có thể là trường hợp, có vẻ như một chút của một giám sát ... Tôi có thể có một đi theo một yêu cầu kéo cho một phương pháp unset. Dù sao, điều đó hoạt động rực rỡ ngay bây giờ. – nickspiel