← Powrót do projektów Aplikacja web · Motoryzacja

V. Parrot Garage

Katalog pojazdów z zaawansowanymi filtrami, szczegółami i zarządzaniem obrazami.

V. Parrot Garage
PROJEKT

Projekt

V. Parrot pokazuje bardziej aplikacyjną architekturę Symfony z katalogiem pojazdów, zaawansowanymi filtrami, uporządkowanymi danymi i zarządzaniem obrazami.

Architektura systemu & Platforma biznesowa

Kompleksowa platforma webowa dla branży motoryzacyjnej stworzona w Symfony 6, Doctrine ORM i EasyAdmin 4. Łączy w sobie stronę handlową o wysokiej konwersji, wyszukiwarkę aut używanych w technologii AJAX, panel uprawnień (RBAC) oraz API REST dla aplikacji mobilnych.

┌─────────────────────────────────────────────────────────────────────────────┐
│               Garage Vincent Parrot — Architecture Dual-Tier                │
└──────────────────────────────────────┬──────────────────────────────────────┘
                                       │
           ┌───────────────────────────┼───────────────────────────┐
           ▼                           ▼                           ▼
  🚗 Moteur Véhicules & AJAX     👥 Back-Office RBAC          📡 API REST Headless
  • noUiSlider (Prix, Km, Année) • EasyAdmin 4 Dashboard      • Serializer JMS Groups
  • Dropdowns dépendants BDD    • Isolation ROLE_ADMIN/EMP   • Endpoints paginés (/api)
  • Rendu partiel JSON/Twig     • Modération avis clients    • Support Mobile & Cross-App
  • VichUploader multi-photos   • Gestion horaires & services • Sécurité CORS & CSRF
            

Wyszukiwarka AJAX

Dynamiczne wielokryterialne filtrowanie pojazdów z noUiSlider bez przeładowywania strony.

Kontrola dostępu (RBAC)

Rygorystyczny podział uprawnień między właścicielem warsztatu a pracownikami.

Niezależne API REST

Bezpieczne punkty końcowe JSON zasilające aplikację mobilną we Flutterze i integracje zewnętrzne.

1. Funkcje portalu publicznego

Zaprojektowany, aby prezentować usługi warsztatu i skutecznie pozyskiwać zapytania ofertowe:

CMS Usług warsztatowych

Szczegółowa prezentacja napraw (mechanika, blacharstwo, lakiernictwo, klimatyzacja, przeglądy) z obsługą zdjęć przez VichUploader.

Katalog samochodów używanych

Szczegółowe karty pojazdów (/occasions/vehicule/{id}) z karuzelą zdjęć, danymi technicznymi i formularzem z automatycznie wpisanym modelem.

Opinie klientów i moderacja

System ocen w skali 5 gwiazdek z zabezpieczeniem antyspamowym i weryfikacją przez pracowników przed publikacją.

Dynamiczne godziny otwarcia

Dedykowane rozszerzenie Twig (HoraireExtension) wstawiające w czasie rzeczywistym aktualny grafik do stopki strony.

2. Wielokryterialny silnik filtrowania AJAX

Filtrowanie łączy SearchData, SearchForm, VehiculeRepository::findSearch() oraz asynchroniczny kontroler JavaScript:

Kryterium wyszukiwania Komponent interfejsu Zapytanie Doctrine DQL
Przedział cenowy Dual-handle noUiSlider p.prix >= :prixmin AND p.prix <= :prixmax
Przebieg (km) Dual-handle noUiSlider p.kilometrage >= :kmmin AND p.kilometrage <= :kmmax
Rok produkcji Dual-handle noUiSlider (1970 - 2026) p.annee >= :anneemin AND p.annee <= :anneemax
Marka & Model Dynamiczne powiązane listy rozwijane (/modeles/fetch) m.id IN (:marque) AND d.id IN (:modele)
Nadwozie, Paliwo & Kategoria Checkboxes (Carrosserie, Énergie) t.id IN (:type), a.id IN (:carburant)
// Rendu partiel asynchrone JSON dans OccasionsController.php
if ($request->get('ajax')) {
    return new JsonResponse([
        'content'    => $this->renderView('occasions/_occasions.html.twig', ['occasions' => $occasions]),
        'sorting'    => $this->renderView('occasions/_sorting.html.twig', ['occasions' => $occasions]),
        'pagination' => $this->renderView('occasions/_pagination.html.twig', ['occasions' => $occasions]),
        'prixmin'    => $prixmin, 'prixmax' => $prixmax,
        'kmmin'      => $kmmin,   'kmmax'   => $kmmax,
        'anneemin'   => $anneemin,'anneemax'=> $anneemax
    ]);
}
            

3. Kontrola dostępu oparta na rolach (RBAC)

Zarządzanie uprawnieniami i panelami administracyjnymi za pośrednictwem EasyAdmin i Symfony Security:

ROLE_ADMIN Administrator (Vincent Parrot)

  • Zarządzanie kontami pracowników (tworzenie, resetowanie haseł z wymogiem wysokiej złożoności).
  • Pełne zarządzanie usługami warsztatu, tekstami i materiałami graficznymi w CMS.
  • Konfiguracja tygodniowego harmonogramu godzin otwarcia i dni wolnych od pracy.
  • Przeglądanie i zarządzanie otrzymanymi wiadomościami od klientów.

ROLE_EMPLOYE Pracownicy warsztatu

  • Zarządzanie bazą aut używanych (dodawanie, przesyłanie wielu zdjęć, konfiguracja opcji wyposażenia).
  • Automatyczne przypisanie zalogowanego pracownika jako autora ogłoszenia podczas zapisu do bazy.
  • Moderacja opinii klientów (zatwierdzanie rzetelnych recenzji lub odrzucanie spamu).
  • Brak możliwości podniesienia własnych uprawnień do poziomu Administratora.

4. Punkty końcowe headless API REST

Bezpieczne endpointy JSON dedykowane dla aplikacji mobilnej i systemów zewnętrznych:

Method Endpoint URL Przeznaczenie operacji Format odpowiedzi JSON
GET /api/vehicules Pobieranie pełnej listy dostępnych pojazdów JSON Array (JMS getVehicules group)
GET /api/vehiculesby?page={n} Stronicowana lista pojazdów do płynnego doczytywania { data: [...], pagination: { ... } }
GET /api/vehicules/{id} Pełna specyfikacja i galeria zdjęć dla konkretnego identyfikatora pojazdu JSON Object (Véhicule, Galerie, Options)
GET /api/marques-modeles Kompletna hierarchia dostępnych marek i modeli [{ id, nom, modeles: [{ id, nom }] }]
POST /api/contact Wysyłka formularza kontaktowego z automatycznym powiadomieniem e-mail { status: "success" } (HTTP 201)

5. Model danych & Relacje Doctrine

Znormalizowany schemat relacyjny z integralnością kluczy obcych w bazie MySQL:

Encja Pojazd & Galeria

Kaskadowa relacja OneToMany z VehiculeImage dla wielu zdjęć oraz ManyToMany z tabelą Employes.

Taksonomia motoryzacyjna

Normalizacja encji Marque, Modele, Carburant (Benzyna, Diesel, Hybryda, Elektryczny), Categorie i Type.

Operacje & Interakcje

Dedykowane encje dla Service, Horaire, Temoignage (z flagą akceptacji) oraz Contact.

6. Architektura SEO & Wydajność

Lokalne SEO & Dane strukturalne

Formatowanie Schema.org dla encji AutoRepair i Product/Car, nasycenie słowami kluczowymi dla rejonu Tuluzy i czyste adresy URL.

Wydajność & Częściowe renderowanie

Częściowe renderowanie asynchroniczne AJAX ograniczające transfer danych podczas filtrowania, optymalizacja zdjęć i ochrona CSRF.

Odwiedź działającą platformę

Przejrzyj ofertę aut używanych i przetestuj wielokryterialne filtry na żywo.

Przejdź do strony warsztatu ↗