← Terug naar projecten Webapplicatie · Auto

V. Parrot Garage

Een voertuigcatalogus met geavanceerde filters, voertuigdetails en afbeeldingsbeheer.

V. Parrot Garage
PROJECT

Het project

V. Parrot toont een meer applicatiegerichte Symfony-architectuur, met een voertuigcatalogus, geavanceerde filters, gestructureerde data en beeldbeheer.

Systeemarchitectuur & Bedrijfsplatform

Compleet zakelijk webplatform voor de automotive sector ontwikkeld met Symfony 6, Doctrine ORM en EasyAdmin 4. Het combineert een conversiegerichte showroom, een AJAX-gestuurde zoekmachine voor tweedehands auto's, rolgebaseerd beheer (RBAC) en REST API's voor mobiele 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-zoekmachine

Dynamisch zoeken naar voertuigen op meerdere criteria met noUiSlider zonder paginaherlaad.

Rolgebaseerde toegangscontrole (RBAC)

Strikte scheiding tussen de bevoegdheden van de garagehouder en de medewerkers.

Ontkoppelde REST API

Beveiligde JSON-endpoints die de Flutter-app en externe integraties van data voorzien.

1. Functies van het openbare portaal

Ontwikkeld om de werkplaatsdiensten te presenteren en bezoekers om te zetten in concrete aanvragen:

CMS voor werkplaatsdiensten

Overzichtelijke presentatie van reparaties (mechanica, carrosserie, periodiek onderhoud, aircoservice) met fotobeheer via VichUploader.

Catalogus met tweedehands auto's

Uitgebreide autopagina's (/occasions/vehicule/{id}) met fotocarrousel, technische specificaties en vooraf ingevuld aanvraagformulier.

Klantbeoordelingen & Moderatie

5-sterren beoordelingssysteem met spambeveiliging en handmatige goedkeuring door medewerkers vóór publicatie.

Dynamische openingstijden

Eigen Twig-extensie (HoraireExtension) die automatisch actuele openingstijden in de footer van de hele site toont.

2. Asynchrone AJAX-meervoudige filter

Het facetzoeken combineert SearchData, SearchForm, VehiculeRepository::findSearch() en een asynchrone JavaScript-controller:

Zoekcriterium Interface-element Doctrine DQL-query
Prijsklasse Dual-handle noUiSlider p.prix >= :prixmin AND p.prix <= :prixmax
Kilometerstand Dual-handle noUiSlider p.kilometrage >= :kmmin AND p.kilometrage <= :kmmax
Bouwjaar / Eerste toelating Dual-handle noUiSlider (1970 - 2026) p.annee >= :anneemin AND p.annee <= :anneemax
Merk & Model Dynamisch gekoppelde vervolgkeuzemenu's (/modeles/fetch) m.id IN (:marque) AND d.id IN (:modele)
Carrosserie, Brandstof & 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. Rolgebaseerde toegangscontrole (RBAC)

Beheer van rechten en beheerpanelen via EasyAdmin en Symfony Security-firewalls:

ROLE_ADMIN Beheerder (Vincent Parrot)

  • Beheer van medewerkersaccounts (aanmaken, wachtwoordherstel met strikte complexiteitseisen).
  • Volledig CMS-beheer over werkplaatsdiensten, teksten en beeldmateriaal.
  • Instellen van wekelijkse openingstijden en registreren van vakantiesluitingen.
  • Inzien en beheren van binnengekomen klantberichten.

ROLE_EMPLOYE Werkplaatsmedewerkers

  • Beheer van tweedehands auto's (invoeren, uploaden van meerdere foto's, opties selecteren).
  • Automatische toewijzing van de ingelogde medewerker als auteur bij het opslaan in de database.
  • Moderatie van klantbeoordelingen (echte reviews goedkeuren of spam afwijzen).
  • Geen mogelijkheid om eigen rechten te verhogen naar beheerdersniveau.

4. Headless REST API-endpoints

Beveiligde JSON-endpoints voor de mobiele app en externe koppelingen:

Method Endpoint URL Doel van de bewerking JSON-responsformaat
GET /api/vehicules Ophalen van de volledige voorraad beschikbare auto's JSON Array (JMS getVehicules group)
GET /api/vehiculesby?page={n} Gepagineerde autolijst voor soepel inladen { data: [...], pagination: { ... } }
GET /api/vehicules/{id} Volledige specificaties en fotogalerij voor een specifiek voertuig-ID JSON Object (Véhicule, Galerie, Options)
GET /api/marques-modeles Volledige hiërarchie van automerken en bijbehorende modellen [{ id, nom, modeles: [{ id, nom }] }]
POST /api/contact Versturen van klantvragen met automatische e-mailnotificatie { status: "success" } (HTTP 201)

5. Datamodel & Doctrine-relaties

Genormaliseerd relationeel schema met referentiële integriteit in MySQL:

Voertuig- & Media-entiteit

OneToMany-cascade naar VehiculeImage voor meerdere foto's en ManyToMany-koppeling naar Employes.

Voertuigtaxonomie

Genormaliseerde entiteiten voor Marque, Modele, Carburant (Benzine, Diesel, Hybride, Elektrisch), Categorie en Type.

Bedrijfsvoering & Aanvragen

Eigen entiteiten voor Service, Horaire, Temoignage (met goedkeuringsstatus) en Contact.

6. SEO-architectuur & Prestaties

Lokale SEO & Gestructureerde data

Schema.org-metadata voor AutoRepair en Product/Car, gerichte zoekwoorddichtheid voor de regio Toulouse en schone canonieke URL's.

Prestaties & Gedeeltelijke rendering

Asynchrone gedeeltelijke AJAX-rendering om dataverkeer tijdens het filteren te minimaliseren, beeldoptimalisatie en CSRF-beveiliging.

Bekijk het live platform

Bekijk de catalogus met occasions en test de realtime zoekfilters direct online.

Bezoek de website van de garage ↗