Files
tehnobox/app/Http/Controllers/Shop/FavoriteController.php
ssww23 0ee9f05416
Some checks failed
Deploy / deploy (push) Has been cancelled
1
2026-03-17 01:59:00 +03:00

51 lines
1.5 KiB
PHP

<?php
namespace App\Http\Controllers\Shop;
use App\Http\Controllers\Controller;
use App\Models\Product;
class FavoriteController extends Controller
{
public function index()
{
$favoriteIds = $this->favoriteIds();
$position = array_flip($favoriteIds);
$products = Product::query()
->whereIn('id', $favoriteIds)
->where('is_active', true)
->with('category')
->get()
->sortBy(fn (Product $product) => $position[$product->id] ?? PHP_INT_MAX)
->values();
return view('shop.favorites', [
'products' => $products,
]);
}
public function toggle(Product $product)
{
$favorites = $this->favoriteIds();
$exists = in_array($product->id, $favorites, true);
if ($exists) {
$favorites = array_values(array_filter($favorites, fn (int $id) => $id !== $product->id));
session()->put('favorites', $favorites);
return back()->with('status', __('Товар ":name" удален из избранного.', ['name' => $product->name]));
}
$favorites[] = $product->id;
session()->put('favorites', array_values(array_unique($favorites)));
return back()->with('status', __('Товар ":name" добавлен в избранное.', ['name' => $product->name]));
}
private function favoriteIds(): array
{
return array_values(array_map('intval', (array) session()->get('favorites', [])));
}
}