如何在 Laravel 8 中每次在同一个 cookie 中插入多个值

问题描述 投票:0回答:2

我的控制器

 public function addcart(Request $request)
{

    $data1 =  array($request);
    if (is_array($data1) || is_object($data1)) {
        foreach ($data1 as $data1) {
            // if (!empty($id)) {
            $data[] = [
                'id' => $data1->id,
                'quantity' => $data1->quantity,
            ];
            foreach ($data as $data) {
                $data2 = Cookie::get('cart');
                if (Cookie::get('cart') == null) {
                    setcookie('cart', json_encode($data));
                }else{
                    Cookie::queue('cart', json_encode($data));
                }
            }
        }
    }
    return redirect()->back();
}

我的刀片

 @foreach ($data as $data)
                    <form action="{{ url('/addcart') }}" method="post">
                        @csrf
                        <tr>

                            <td class="w-25">
                                <img src="/foodimage/{{ $data->image }}" class="img-fluid img-thumbnail"
                                    alt="Sheep">
                            </td>
                            <td>{{ $data->food_name }}</td>
                            <td>{{ $data->price }}</td>
                            <td value="{{ $data->category_id }}">{{ $data->category_id }}</td>

                            <td><button type="button" class="btn btn-info">{{ $data->available }}</button></td>
                            <td>{{ $data->description }}</td>
                            <td><input type="number" class="form-control" name="quantity" min="1">
                                <input type="number" name="id" value="{{ $data->id }}" hidden="">
                                <button type="submit" class="btn btn-primary">add cart</button>
                            </td>
                            {{-- <td><a class="btn btn-danger" href="{{ url('/removefood',$users->id) }}">Delete</a></td> --}}

                        </tr>
                    </form>
                @endforeach

每当我向购物车添加新值时,我的 cookie 就会替换之前的值。我想保留以前的数据,并在每次提交表单时在cookie中插入新数据。 谁能帮我? TIA

php cookies controller laravel-8 laravel-blade
2个回答
0
投票

我自己已经给出了答案。如果您需要的话,这是代码。

public function addcart(Request $request)
{
    $quantity = $request->quantity;
    $id = $request->id;

    $cart = isset($_COOKIE["cart"]) ? $_COOKIE["cart"] : "[]";
    $cart = json_decode($cart);
    $cart1 = json_decode(json_encode($cart), true);
    $cartcheck = $cart1['id'];

    $newarray = new stdClass();
    $newarray->id = $id;
    $newarray->quantity = $quantity;
    $newarray1 = json_decode(json_encode($newarray), true);
    $newarraycheck = $newarray->id;

    if (empty($cart)) {
        setcookie("cart", json_encode($newarray));
    }
    $flag = 0;

    foreach ($cartcheck as $cartcheck) {

        if ($cartcheck == $newarraycheck) {
            $flag = 1;
        }
    }
    if($flag==0){
        $result = array_merge_recursive($cart1, $newarray1);
    setcookie("cart", json_encode($result));
    }else{
        echo "Already in cart";
    }


    return redirect()->back();
}

0
投票

以下是代码的更新版本。此修改版本:

  1. 删除了对象和数组之间不必要的转换。
  2. 直接从 cookie 中将现有购物车解码为关联数组。 3. 使用更直接的方法来检查商品是否已在购物车中。 4.简化代码结构,提高可读性和可维护性。

    public function addcart(Request $request){
    
        $quantity = $request->quantity;
        $id = $request->id;
    
        $cart = isset($_COOKIE["cart"]) ? json_decode($_COOKIE["cart"], true) : [];
    
        $newItem = ['id' => $id, 'quantity' => $quantity];
    
        $flag = false;
    
        foreach ($cart as $item) {
            if ($item['id'] == $id) {
                $flag = true;
                break;
            }
        }
    
        if (!$flag) {
            $cart[] = $newItem;
            setcookie("cart", json_encode($cart));
        } else {
            echo "Already in cart";
        }
    
        return redirect()->back();
    }

© www.soinside.com 2019 - 2024. All rights reserved.