@SashaZhukov01

Что не так в моем методе утаения товаров из корзины?

При удалении товаров из корзины удаляются все кроме первого добавленного, на первом просто редиректит, даже если у меня в методе просто дамп он выводится везде но не в первом товаре.
Контроллер с добавлением отображением и удалением товаров:
<?php

namespace App\Http\Controllers;

use App\Models\Currency;
use App\Models\Product;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Session;

class CartController extends Controller
{
public function index(Request $request)
{
$currencyActive = Currency::find($request->session()->get('currencies'));
$currency = Currency::all()->count();

$cart = Session::get('cart', []);
$totalPrice = 0;
foreach ($cart as $productId => $product) {
$totalPrice += $product['price'] * $product['quantity'];
}

return view('cart.cart', compact('currency', 'cart', 'totalPrice', 'currencyActive'));
}

public function addToCart(Request $request, $productId)
{
if (!Auth::check()) {
return redirect()->route('login');
}

$cart = Session::get('cart', []);

if (array_key_exists($productId, $cart)) {
$cart[$productId]['quantity'] += $request->input('quantity');
}else {
$product = Product::find($productId);
$productInfo = [
'name' => $product->name,
'price' => $product->price,
'img' => $product->img,
'color' => $request->input('color'),
'size' => $request->input('size'),
'quantity' => $request->input('quantity'),
];
$cart[$productId] = $productInfo;
}

Session::put('cart', $cart);
Session::save();

return redirect()->route('cart.index');
}

public function remove($productId)
{
if (!Auth::check()) {
return redirect()->route('login');
}

$cart = Session::get('cart');

if (array_key_exists($productId, $cart)) {
unset($cart[$productId]);
Session::put('cart', $cart);
}

return redirect()->route('cart.index');
}
}

Роуты корзины:
Route::prefix('/cart')->group(function () {
Route::get('/', [CartController::class, 'index'])->name('cart.index');
Route::post('/add{productId}', [CartController::class, 'addToCart'])->name('add.product.toCart');
Route::delete('/remove{productId}', [CartController::class, 'remove'])->name('product.remove');
});

Форма отправления запроса на удаление:
<div class="mt-4 flex items-center sm:absolute sm:left-1/2 sm:top-0 sm:mt-0 sm:block">
                                        <h1>Quantity: {{ $product['quantity'] }}</h1>
                                        <form action="{{ route('product.remove', $productId) }}" method="post">
                                            @csrf
                                            @method('delete')
                                            <button type="submit" class="ml-4 text-sm font-medium text-indigo-600 hover:text-indigo-500 sm:ml-0 sm:mt-3">
                                                Remove
                                            </button>
                                        </form>

                                    </div>
                                </div>
  • Вопрос задан
  • 140 просмотров
Решения вопроса 1
@SashaZhukov01 Автор вопроса
Спасибо всем, не работало почему то потому что все эти данные были в пустой форме, не совсем понимаю почему, но предполагаю что запрос просто шел не туда куда надо
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Начнем с того что роуты так не пишутся. А хелпер роута работает не так как у вас предполагается.
//router 
...
Route::post('/add/{productId}', [CartController::class, 'addToCart'])->name('add.product.toCart');
Route::delete('/remove/{productId}', [CartController::class, 'remove'])->name('product.remove');
...

//Controller
public function remove($productId)
{
/* это вообще в мидлваре должно происходить, тут ему делать нечего, впишите роут в ауч группу...
    if (!Auth::check()) {
        return redirect()->route('login');
    }
*/
    $cart = Session::get('cart');
    if (array_key_exists($productId, $cart)) {
        unset($cart[$productId]);
        Session::put('cart', $cart);
    }
    return redirect()->route('cart.index');
}
...
//HTML
<form action="{{ route('product.remove', ['productId'=>$productId]) }}" method="post">
// читать как работает хелпер route, посмотреть какой урл он выдает у вас сейчас, плакать, править...


на первом просто редиректит,
Во первых - редирект куда? Во вторых, стоит заглянуть в сгенерированный хтмл и посмотреть какой там реальный урл формы. Так же при отправке посмотреть нетворк и посмотреть что и куда реально отправляется и с какими данными.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы