Как вставлять несколько значений в один и тот же файл cookie каждый раз в Laravel 8

#php #cookies #controller #laravel-8 #laravel-blade

Вопрос:

мой контроллер

  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 каждый раз при отправке формы.
кто-нибудь может мне помочь?
ТИА

Ответ №1:

Я сам дал ответ на этот вопрос. Вот код, если он вам понадобится.

 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();
}