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