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 ↗