【问题标题】:Laravel session not workingLaravel 会话不起作用
【发布时间】:2016-11-26 17:16:07
【问题描述】:

我需要在单击按钮时增加变量的值,但该值始终为 1。我已经点击按钮超过五次,但结果始终是 1。请看附件。

我的购物车类

class Cart
{
    public $totalQuantity = 0;


    public function __construct($oldCart)
    {
        if ($oldCart) {

            $this->totalQuantity = $oldCart->totalQuantity;
        }

    }

    public function add()
    {
        $this->totalQuantity++;

    }
}

控制器方法

public function getAddToCart(Request $request,$id){
    $oldCart=null;
    //code that i added now to check which returns null
     dd($request->session()->get('cart'));

    if($request->session()->pull('cart')) {
        $oldCart=$request->session()->pull('cart') ;
    }

    $cart=new Cart($oldCart);
    $cart->add();

    $request->session()->push('cart',$cart);
    dd($request->session()->pull('cart'));

    return redirect()->back();
}

下面是图片

【问题讨论】:

    标签: php laravel session


    【解决方案1】:

    Laravel 文档:

    pull 方法将从会话中检索和删除一个项目 单个语句

    因此,如果您在 if 语句中拉取它,那么第二次拉取将无法为您提供任何帮助,因为您已经将其删除了 :)。您应该改用 get,或直接将其拉入 $oldCart 变量。

    哦,如果你使用 push 方法,它会被存储为一个数组,所以你的代码应该是这样的:

    $oldCart = $request->session()->pull('cart');
    
    if ($oldCart) {
        $cart = new Cart($oldCart[0]);
    } else {
        $cart = new Cart(null);
    }
    $cart->add();
    
    $request->session()->push('cart',$cart);
    

    甚至更好:

    $oldCart = null;
    
    if ($request->session()->has('cart')) {
        $oldCart = $request->session()->get('cart');
    }
    
    $cart = new Cart($oldCart);
    $cart->add();
    
    $request->session()->put('cart',$cart);
    

    【讨论】:

    • 总数量仍然是一个。使用redirect->back()命令有错吗
    • 我使用了上面在问题中编辑的 dd 方法。在我多次按下按钮后,它显示返回的购物车对象为空。
    • 当您使用 dd() 时,会话不会存储,因为您中断 php 请求并且它不会结束。尝试只是回应它。
    猜你喜欢
    • 2015-06-03
    • 2017-02-27
    • 2018-07-02
    • 2014-09-14
    • 2015-10-13
    • 2018-01-22
    • 2015-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多