Systemarchitektur & Unternehmensplattform
Full-Stack-Automobil-Webplattform entwickelt mit Symfony 6, Doctrine ORM und EasyAdmin 4. Sie kombiniert ein verkaufsstarkes Portal, eine AJAX-Gebrauchtwagensuche, rollenbasierte Administration (RBAC) und REST-APIs für mobile Apps.
┌─────────────────────────────────────────────────────────────────────────────┐
│ 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
AJAX-Suchmaschine
Dynamische Mehrkriterien-Fahrzeugsuche mit noUiSlider ohne Neuladen der Seite.
Rollenbasierte Zugriffskontrolle
Strikte Trennung der Rechte zwischen Werkstattinhaber und Mitarbeitern.
Entkoppelte REST-API
Sichere JSON-Endpunkte zur Speisung der Flutter-App und externer Systeme.
1. Funktionen des öffentlichen Portals
Entwickelt zur Präsentation der Werkstattleistungen und Gewinnung qualifizierter Anfragen:
Werkstattleistungen-CMS
Strukturierte Leistungsübersicht (Mechanik, Karosseriebau, Wartungsintervalle, Klimaservice) mit Bildverwaltung via VichUploader.
Gebrauchtwagen-Bestandskatalog
Detaillierte Fahrzeugseiten (/occasions/vehicule/{id}) mit Bildkarussell, Ausstattungsangaben und vorausgefülltem Anfrageformular.
Kundenbewertungen & Moderation
5-Sterne-Bewertungssystem mit Spam-Schutz und Mitarbeiterfreigabe vor der Veröffentlichung.
Dynamische Öffnungszeiten-Anzeige
Dedizierte Twig-Erweiterung (HoraireExtension) zur automatischen Einbindung der Echtzeit-Öffnungszeiten im Footer.
2. Asynchroner AJAX-Mehrkriterien-Filter
Die Filtersuche verbindet SearchData, SearchForm, VehiculeRepository::findSearch() und einen JavaScript-Controller:
| Suchkriterium |
UI-Steuerung |
Doctrine-DQL-Abfrage |
| Preisspanne |
Dual-handle noUiSlider |
p.prix >= :prixmin AND p.prix <= :prixmax |
| Kilometerstand |
Dual-handle noUiSlider |
p.kilometrage >= :kmmin AND p.kilometrage <= :kmmax |
| Erstzulassung |
Dual-handle noUiSlider (1970 - 2026) |
p.annee >= :anneemin AND p.annee <= :anneemax |
| Marke & Modell |
Dynamisch kaskadierende Dropdowns (/modeles/fetch) |
m.id IN (:marque) AND d.id IN (:modele) |
| Karosserieform, Kraftstoff & Kategorie |
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. Rollenbasierte Zugriffskontrolle (RBAC)
Rechteverwaltung über EasyAdmin und Symfony Security Firewalls:
ROLE_ADMIN
Administrator (Vincent Parrot)
- Mitarbeiterkonten-Verwaltung (Anlage, Passwort-Reset mit geprüfter Komplexität).
- Vollständige CMS-Pflege der Werkstattleistungen, Texte und Bilder.
- Verwaltung der wöchentlichen Öffnungszeiten und Urlaubszeiten.
- Prüfung und Verwaltung eingegangener Kundenanfragen.
ROLE_EMPLOYE
Werkstatt-Mitarbeiter
- Gebrauchtwagen-Bestandsverwaltung (Inserieren, Mehrfach-Bilderupload, Ausstattungsmerkmale).
- Automatische Zuordnung des eingeloggten Mitarbeiters als Autor bei der Datenbankspeicherung.
- Kundenbewertungs-Moderation (Freigabe echter Rezensionen oder Löschung von Spam).
- Keine Möglichkeit zur Rechteerweiterung auf Administrator-Ebene.
4. Headless REST-API-Endpunkte
Sichere JSON-Endpunkte für mobile Apps und Schnittstellen:
| Method |
Endpoint URL |
Verwendungszweck |
JSON-Antwortstruktur |
| GET |
/api/vehicules |
Abruf des gesamten Fahrzeugbestands |
JSON Array (JMS getVehicules group) |
| GET |
/api/vehiculesby?page={n} |
Paginierte Fahrzeugliste für schnelles Nachladen |
{ data: [...], pagination: { ... } } |
| GET |
/api/vehicules/{id} |
Vollständige Spezifikationen und Bildergalerie für ein Einzelfahrzeug |
JSON Object (Véhicule, Galerie, Options) |
| GET |
/api/marques-modeles |
Vollständige Hierarchie verfügbarer Marken und Modelle |
[{ id, nom, modeles: [{ id, nom }] }] |
| POST |
/api/contact |
Kundenanfrage übermitteln mit automatischem E-Mail-Versand |
{ status: "success" } (HTTP 201) |
5. Datenmodell & Doctrine-Relationen
Normalisiertes relationales Schema mit Fremdschlüssel-Integrität unter MySQL:
Entität Vehicule & Galerie
OneToMany-Kaskade zu VehiculeImage für Mehrfachfotos und ManyToMany-Verknüpfung zu Employes.
Fahrzeugtaxonomie
Relational normalisierte Entitäten Marque, Modele, Carburant (Benzin, Diesel, Hybrid, Elektro), Categorie und Type.
Betrieb & Interaktionen
Entitäten für Service, Horaire, Temoignage (mit booleschem Freigabestatus) und Contact.
6. SEO-Architektur & Performance
Lokales SEO & Strukturierte Daten
Schema.org-Markup für AutoRepair und Product/Car, gezielte Keyword-Dichte für den Raum Toulouse und kanonische URLs.
Performance & Partielles Rendering
Asynchrones partielles AJAX-Rendering zur Minimierung des Datenvolumens, optimierte Bildbereitstellung und CSRF-Schutz.