Architettura di Sistema & Piattaforma Gestionale
Piattaforma web completa per il settore automobilistico realizzata con Symfony 6, Doctrine ORM ed EasyAdmin 4. Unisce una vetrina commerciale ad alte conversioni, un motore di ricerca per veicoli usati in AJAX, un'area di amministrazione con ruoli (RBAC) e API REST per app mobili.
┌─────────────────────────────────────────────────────────────────────────────┐
│ 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
Motore di Ricerca AJAX
Filtro dinamico multicriterio dei veicoli con noUiSlider senza ricaricare la pagina.
Controllo Accessi a Ruoli (RBAC)
Separazione rigorosa dei privilegi tra il titolare dell'officina e i dipendenti.
API REST Disaccoppiata
Endpoint JSON protetti che alimentano l'applicazione mobile Flutter e integrazioni esterne.
1. Funzionalità del Portale Pubblico
Progettato per valorizzare le competenze dell'officina e convertire i visitatori in contatti qualificati:
CMS dei Servizi d'Officina
Presentazione dettagliata delle riparazioni (meccanica, carrozzeria, manutenzione ordinaria, aria condizionata) con gestione immagini via VichUploader.
Catalogo Veicoli Usati
Schede auto complete (/occasions/vehicule/{id}) con gallerie a carosello, specifiche tecniche e modulo di contatto precompilato.
Recensioni Clienti & Moderazione
Sistema di valutazione a 5 stelle con controllo antispam e coda di approvazione da parte dei dipendenti prima della pubblicazione.
Orari di Apertura Dinamici
Estensione Twig dedicata (HoraireExtension) che inietta in tempo reale gli orari di apertura aggiornati nel footer globale.
2. Motore di Ricerca Multicriterio in AJAX
La ricerca avanzata integra SearchData, SearchForm, VehiculeRepository::findSearch() e un controller JavaScript asincrono:
| Criterio di Ricerca |
Componente UI |
Query Doctrine DQL |
| Fascia di Prezzo |
Dual-handle noUiSlider |
p.prix >= :prixmin AND p.prix <= :prixmax |
| Chilometraggio |
Dual-handle noUiSlider |
p.kilometrage >= :kmmin AND p.kilometrage <= :kmmax |
| Anno di Immatricolazione |
Dual-handle noUiSlider (1970 - 2026) |
p.annee >= :anneemin AND p.annee <= :anneemax |
| Marca & Modello |
Menu a tendina dipendenti dinamici (/modeles/fetch) |
m.id IN (:marque) AND d.id IN (:modele) |
| Carrozzeria, Alimentazione & Categoria |
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. Controllo degli Accessi Basato sui Ruoli (RBAC)
Gestione delle autorizzazioni e delle sezioni di amministrazione tramite EasyAdmin e i firewall di Symfony Security:
ROLE_ADMIN
Amministratore (Vincent Parrot)
- Gestione account dipendenti (creazione, reset password con criteri di complessità elevati).
- Controllo CMS totale su servizi d'officina, descrizioni e immagini.
- Gestione degli orari di apertura settimanali e dei giorni di chiusura per ferie.
- Consultazione e gestione delle richieste di contatto pervenute.
ROLE_EMPLOYE
Dipendenti dell'Officina
- Gestione del parco auto usate (inserimento, caricamento foto multiple, selezione optional).
- Assegnazione automatica del dipendente autenticato come autore dell'annuncio al salvataggio.
- Moderazione delle recensioni (approvazione delle opinioni autentiche o rifiuto dello spam).
- Impossibilità di elevare autonomamente i propri privilegi al ruolo di Amministratore.
4. Endpoint dell'API REST Headless
Endpoint JSON sicuri per l'applicazione mobile e strumenti esterni:
| Method |
Endpoint URL |
Descrizione Operazione |
Formato Risposta JSON |
| GET |
/api/vehicules |
Recupero dell'intero inventario delle vetture disponibili |
JSON Array (JMS getVehicules group) |
| GET |
/api/vehiculesby?page={n} |
Collezione paginata di veicoli per scorrimento ottimizzato |
{ data: [...], pagination: { ... } } |
| GET |
/api/vehicules/{id} |
Specifiche complete e galleria immagini per un singolo ID veicolo |
JSON Object (Véhicule, Galerie, Options) |
| GET |
/api/marques-modeles |
Alberatura completa di tutte le marche e i modelli disponibili |
[{ id, nom, modeles: [{ id, nom }] }] |
| POST |
/api/contact |
Invio richiesta di contatto con notifica e-mail transazionale automatica |
{ status: "success" } (HTTP 201) |
5. Modello Dati & Relazioni Doctrine
Schema relazionale normalizzato con vincoli di integrità referenziale su MySQL:
Entità Veicolo & Media
Mappatura OneToMany a cascata verso VehiculeImage per foto multiple e ManyToMany con Employes.
Tassonomia Automobilistica
Entità normalizzate per Marque, Modele, Carburant (Benzina, Diesel, Ibrida, Elettrica), Categorie e Type.
Operazioni & Interazioni
Entità dedicate per Service, Horaire, Temoignage (con flag booleano di approvazione) e Contact.
6. Architettura SEO & Prestazioni
SEO Locale & Dati Strutturati
Markup Schema.org per le entità AutoRepair e Product/Car, densità di parole chiave incentrata sull'area di Tolosa e URL canonici puliti.
Prestazioni & Rendering Parziale
Rendering parziale in AJAX per ridurre il traffico dati durante i filtri, gestione ottimizzata delle immagini e protezione CSRF su tutti i form.