← Înapoi la proiecte Aplicație web · Automobile

V. Parrot Garage

Un catalog de vehicule cu filtre avansate, fișe detaliate și gestionarea imaginilor.

V. Parrot Garage
PROIECT

Proiectul

V. Parrot ilustrează o arhitectură Symfony orientată spre aplicații, cu catalog de vehicule, filtre avansate, date structurate și gestionarea imaginilor.

Arhitectura Sistemului & Platformă Enterprise

Platformă web enterprise full-stack auto-motive ingeneirizată cu Symfony 6, Doctrine ORM și EasyAdmin 4. Combină un portal public de mare conversie, un motor de căutare auto second-hand alimentat de AJAX, administrare bazată pe roluri (RBAC) și puncte finale API REST fără cap consumate de aplicații mobile.

┌─────────────────────────────────────────────────────────────────────────────┐
│               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
            

Motor de Căutare AJAX

Filtrare dinamică multi-criterii a vehiculelor alimentată de noUiSlider fără re-încărcări de pagin ă.

Control Accesului Bazat pe Roluri

Separare strictă a privilegiilor administrative și operaționale între proprietar și personal.

API REST Decuplat

Puncte finale JSON securizate alimentând aplicația mobilă Flutter și integrări terțe.

1. Caracteristici Portal Public

Proiectat pentru a prezenta expertiza atelierului și a transforma traficul de intrare în piste calificate:

CMS Servicii Atelier

Oferte de reparații detaliate (diagnostic mecanic, caroserie, service rutier, aer condiționat) cu imagerie dinamică gestionată via VichUploader.

Catalog Inventar Vehicule Second-hand

Pagini detaliate ale produsului auto (/occasions/vehicule/{id}) cu galerii carusel, insigne de specificații tehnice și formulare de investigare pre-completate.

Recenzii Clienți & Moderare

Motor de trimitere a ratingului cu 5 stele cu limite de lungime anti-spam și cozi de validare a angajaților înainte de eliberare publică.

Live Opening Hours Injection

Dedicated Twig extension (HoraireExtension) automatically injecting real-time operating schedules into the global footer.

2. AJAX Multi-Criteria Filtering Engine

The faceted search combines SearchData, SearchForm, VehiculeRepository::findSearch(), and an asynchronous JavaScript controller:

Atribut Filtru Control UI Interogare DQL Doctrine
Gama de Preț Dual-handle noUiSlider p.prix >= :prixmin AND p.prix <= :prixmax
Kilometraj (Km) Dual-handle noUiSlider p.kilometrage >= :kmmin AND p.kilometrage <= :kmmax
Anul Înmatriculării Dual-handle noUiSlider (1970 - 2026) p.annee >= :anneemin AND p.annee <= :anneemax
Marcă & Model Casete dependente în cascadă dinamică (/modeles/fetch) m.id IN (:marque) AND d.id IN (:modele)
Tip Caroserie, Combustibil & Categorie 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. Control Accesului Bazat pe Roluri (RBAC)

Permisiuni granulare gestionat e prin EasyAdmin și Pereții de Foc de Securitate Symfony:

ROLE_ADMIN Administrator (Vincent Parrot)

  • Guvernarea contului angajaților (furnizare, resetări de parolă cu politici de complexitate aplicată).
  • Control CMS complet asupra serviciilor de reparație ale atelierului, copywriting de text și active de imagini.
  • Programare orelor de funcționare săptămânale și comutatoare de închidere în ziua de vacanță.
  • Revizuire, inspectare și ștergere a anchetelor de contact ale clienților.

ROLE_EMPLOYE Angajații Atelierului

  • Gestionarea inventarului auto second-hand (creare listări, încărcare mai multor imagini, etichetare opțiuni tehnice).
  • Atribuire automată a angajatului care acționează ca autor la persistența bazei de date.
  • Flux de lucru de moderare a mărturiei (aprobarea recenziilor legitime ale clienților sau respingerea spam-ului).
  • Limită strictă de roluri care previne escaladarea privilegiilor la Administrator.

4. Puncte de Capăt API REST Fără Cap

Puncte finale JSON securizate alimentând aplicații mobile și consumatori de date externi:

Method Endpoint URL Scop Operațiune Sarcină Răspuns JSON
GET /api/vehicules Preluării inventar complet de vehicule disponibile JSON Array (JMS getVehicules group)
GET /api/vehiculesby?page={n} Colecție de vehicule paginat pentru derulare infinită { data: [...], pagination: { ... } }
GET /api/vehicules/{id} Specificații complete și galerie de imagini pentru un singur ID vehicul JSON Object (Véhicule, Galerie, Options)
GET /api/marques-modeles Ierarhie completă a mărcilor auto și modelelor asociate [{ id, nom, modeles: [{ id, nom }] }]
POST /api/contact Transmiteți ancheta clienților cu trimitere automată de e-mail transacțional { status: "success" } (HTTP 201)

5. Model Date & Relații Entitate

Schemă relațională normalizată cu constrângeri de integritate referențială sub MySQL:

Entitate Vehicule & Media

Mapa OneToMany cascadă la VehiculeImage pentru suport multi-foto și legare ManyToMany la Employes.

Taksonomie Automobilă

Normalizare relațională pe Marque, Modele, Carburant (Benzină, Motorină, Hibrid, Electric), Categorie și Tip.

Operations & Interactions

Dedicated entities for Service, Horaire, Temoignage (with boolean approval flag), and Contact.

6. SEO Architecture & Performance Engineering

Local SEO & Structured Data

Schema.org semantic markup for AutoRepair and Product/Car entities, localized keyword density for the Toulouse area, and clean canonical routing.

Performance & Partial Rendering

AJAX-based partial HTML/JSON rendering to minimize payload transfer during filtering, VichUploader image handling, and CSRF protection across all forms.

Explore the Live Platform

Browse the live used vehicle inventory and test the multi-criteria AJAX filtering engine.

Visit Garage Website ↗