Systemarkitektur & Företagsplattform
Helhetsplattform för bilbranschen utvecklad med Symfony 6, Doctrine ORM och EasyAdmin 4. Den kombinerar ett säljorienterat skyltfönster, en AJAX-driven begagnatbilskatalog, rollbaserad administration (RBAC) och REST-API:er för mobilappar.
┌─────────────────────────────────────────────────────────────────────────────┐
│ 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-sökmotor
Dynamisk flerkriteriesökning efter fordon med noUiSlider utan omladdning av sidan.
Rollbaserad åtkomstkontroll (RBAC)
Tydlig uppdelning mellan behörigheterna för verkstadsägaren och de anställda.
Fristående REST-API
Säkra JSON-slutpunkter som förser Flutter-mobilappen och externa integrationer med data.
1. Funktioner på den publika portalen
Utvecklad för att visa upp verkstadens tjänster och omvandla besökare till konkreta förfrågningar:
CMS för verkstadstjänster
Strukturerad presentation av reparationstjänster (mekaniskt arbete, kaross, periodisk service, luftkonditionering) med bildhantering via VichUploader.
Begagnatbilskatalog
Innehållsrika fordonssidor (/occasions/vehicule/{id}) med bildkarusell, tekniska specifikationer och förifyllt kontaktformulär.
Kundrecensioner & Moderering
5-stjärnigt betygssystem med spamskydd och manuellt godkännande av personalen före publicering.
Dynamiska öppettider
Eget Twig-tillägg (HoraireExtension) som automatiskt infogar uppdaterade öppettider i sidfoten på hela webbplatsen.
2. Asynkront AJAX-multikriteriefilter
Fasettsökningen kombinerar SearchData, SearchForm, VehiculeRepository::findSearch() och en asynkron JavaScript-kontroller:
| Sökkriterium |
Gränssnittselement |
Doctrine DQL-fråga |
| Prisintervall |
Dual-handle noUiSlider |
p.prix >= :prixmin AND p.prix <= :prixmax |
| Miltal / Kilometer |
Dual-handle noUiSlider |
p.kilometrage >= :kmmin AND p.kilometrage <= :kmmax |
| Registreringsår |
Dual-handle noUiSlider (1970 - 2026) |
p.annee >= :anneemin AND p.annee <= :anneemax |
| Märke & Modell |
Dynamiskt kopplade rullgardinsmenyer (/modeles/fetch) |
m.id IN (:marque) AND d.id IN (:modele) |
| Kaross, Drivmedel & Kategori |
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. Rollbaserad åtkomstkontroll (RBAC)
Hantering av behörigheter och administrationspaneler via EasyAdmin och Symfony Security-brandväggar:
ROLE_ADMIN
Administratör (Vincent Parrot)
- Hantering av anställdas konton (skapande, återställning av lösenord med strikta komplexitetskrav).
- Full CMS-kontroll över verkstadens tjänsteutbud, texter och bilder.
- Konfiguration av veckovisa öppettider och registrering av semesterstängt.
- Granskning och hantering av inkomna kundförfrågningar.
ROLE_EMPLOYE
Verkstadsanställda
- Hantering av begagnade bilar (skapande, uppladdning av flera bilder, val av utrustning).
- Automatisk koppling av inloggad anställd som författare vid sparande i databasen.
- Moderering av kundrecensioner (godkänna äkta omdömen eller avvisa skräppost).
- Ingen möjlighet att höja de egna behörigheterna till administratörsnivå.
4. Headless REST API-slutpunkter
Säkra JSON-slutpunkter för mobilapplikationen och externa integrationer:
| Method |
Endpoint URL |
Syfte |
JSON-svarsformat |
| GET |
/api/vehicules |
Hämta hela lagret av tillgängliga fordon |
JSON Array (JMS getVehicules group) |
| GET |
/api/vehiculesby?page={n} |
Paginerad fordonslista för smidig inläsning |
{ data: [...], pagination: { ... } } |
| GET |
/api/vehicules/{id} |
Fullständiga specifikationer och bildgalleri för ett specifikt fordons-ID |
JSON Object (Véhicule, Galerie, Options) |
| GET |
/api/marques-modeles |
Komplett hierarki över bilmärken och tillhörande modeller |
[{ id, nom, modeles: [{ id, nom }] }] |
| POST |
/api/contact |
Skicka kundförfrågan med automatiskt e-postmeddelande |
{ status: "success" } (HTTP 201) |
5. Datamodell & Doctrine-relationer
Normaliserat relationsschema med referensintegritet i MySQL:
Fordon & Medie-entitet
OneToMany-kaskad till VehiculeImage för flera bilder och ManyToMany-koppling till Employes.
Fordonstaxonomi
Normaliserade entiteter för Marque, Modele, Carburant (Bensin, Diesel, Hybrid, Elbil), Categorie och Type.
Drift & Förfrågningar
Egna entiteter för Service, Horaire, Temoignage (med godkännandeflagga) och Contact.
6. SEO-arkitektur & Prestanda
Lokal SEO & Strukturerad data
Schema.org-metadata för AutoRepair och Product/Car, målinriktad sökordsdensitet för Toulouse-området och rena kanoniska adresser.
Prestanda & Partiell rendering
Asynkron partiell AJAX-rendering för att minska datatrafik under filtrering, optimerad bildhantering och CSRF-skydd.