Silex:向会话帮助程序添加新值


Silex: Adding new values to the session helper

我正在使用Silex创建的MVC制作一张非常粗糙的购物卡。我有一个 JS/AJAX 问题。我正在尝试将产品提交到购物车。问题是,它提交详细信息,在会话中设置它们并且工作正常。当您添加第二个产品时,它会替换该产品,而不是将其追加到数组中。我尝试了几种不同的事情,但没有成功。(下面的代码)。

干杯

伊万

采用 ajax 值的路由器:

$app->get('/add/to/cart/{id}/{name}/{price}', function( $id, $name, $price ) use ( $app ) {
$basket[] = array (
    'id'    => $id,
    'name'  => $name,
    'price' => $price
);
$app['session']->set( 'basket', $basket ); 
return new Response( "Added to basket." );
});

这是 JavaScript

$('.add-to-cart').on("click", function() {
$productId  = $(this).attr('product-id');
$productName = $(this).attr('product-name');
$productCost = $(this).attr('product-cost');
$.ajax({  
        type: "GET",  
        url: "http://localhost/php/Test/web/index.php/add/to/cart/"+$productId+"/"+$productName+"/"+$productCost,  
        data: {
            // Doesn't need the data, Silex takes it from the url
        },
        success: function() {  
            // Just to check it worked
            console.log( "add/to/cart/"+$productId+"/"+$productName+"/"+$productCost );
        },  
        error: function() { 
        }  
    }); 
});

您需要先获取当前篮子。将此添加到函数的开头:

$basket = $app["session"]->get("basket", array());

第二个参数是默认值,当会话中不存在此类键时返回。这样,在这种情况下你会得到一个空数组。