FavoritesController.php 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. <?php
  2. namespace App\Http\Controllers;
  3. /*
  4. * FavoritesController — страница и JSON-endpoint избранного.
  5. *
  6. * Избранное хранится в localStorage браузера.
  7. * index() — отдаёт пустую страницу (JS читает localStorage и вызывает load())
  8. * load() — принимает POST с массивом IDs, возвращает HTML карточек
  9. */
  10. use App\Models\Car;
  11. use Illuminate\Http\JsonResponse;
  12. use Illuminate\Http\Request;
  13. use Illuminate\View\View;
  14. class FavoritesController extends Controller
  15. {
  16. public function index(): View
  17. {
  18. return view('pages.favorites');
  19. }
  20. // POST /favorites/load {ids: [1,2,3]} → HTML-фрагмент с карточками
  21. public function load(Request $request): JsonResponse
  22. {
  23. $ids = array_filter((array) $request->input('ids', []), 'is_numeric');
  24. $ids = array_map('intval', $ids);
  25. if (empty($ids)) {
  26. return response()->json(['html' => '', 'count' => 0]);
  27. }
  28. $cars = Car::whereIn('id', $ids)
  29. ->where('status', 'active')
  30. ->orderByRaw('FIELD(id, '.implode(',', $ids).')')
  31. ->get();
  32. $fuelLabels = ['petrol' => 'Бензин', 'diesel' => 'Дизель', 'hybrid' => 'Гибрид', 'electric' => 'Электро', 'gas' => 'Газ', 'other' => 'Другое'];
  33. $countryFlags = ['Германия' => '🇩🇪', 'Япония' => '🇯🇵', 'Корея' => '🇰🇷', 'США' => '🇺🇸', 'Китай' => '🇨🇳', 'ОАЭ' => '🇦🇪', 'Грузия' => '🇬🇪', 'Великобритания' => '🇬🇧', 'Франция' => '🇫🇷', 'Италия' => '🇮🇹'];
  34. $html = '';
  35. foreach ($cars as $car) {
  36. $html .= view('pages.partials._car_card', compact('car', 'fuelLabels', 'countryFlags'))->render();
  37. }
  38. return response()->json(['html' => $html, 'count' => $cars->count()]);
  39. }
  40. }