システムアーキテクチャ & 自動車業務プラットフォーム
Symfony 6、Doctrine ORM、EasyAdmin 4で構築されたフルスタック自動車業務プラットフォーム。成約率を高めるショールームWebサイト、AJAX中古車検索エンジン、ロールベース管理画面(RBAC)、モバイルアプリ向けREST APIを統合。
┌─────────────────────────────────────────────────────────────────────────────┐
│ 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検索エンジン
ページリロード不要のnoUiSliderによる動的マルチ条件車両検索。
ロールベースアクセス制御
自動車整備工場の管理者と従業員の間での厳格な権限分離。
疎結合REST API
Flutterモバイルアプリや外部連携システムを支えるセキュアなJSONエンドポイント。
1. 公開ポータル機能
整備工場の技術力をアピールし、成約につながる問い合わせを獲得するための機能群:
整備サービスCMS
修理・メンテナンス(一般整備、板金塗装、定期点検、エアコン整備)の詳細一覧とVichUploaderによる写真管理。
中古車在庫カタログ
カルーセル画像、詳細なスペックバッジ、車両情報が自動連動する問い合わせフォームを備えた車両個別ページ (/occasions/vehicule/{id})。
顧客レビュー & 承認システム
スパムを防ぎ、従業員の事前承認を経て公開される5つ星評価付きのレビュー投稿機能。
営業時間リアルタイム表示
管理画面で設定された最新の営業スケジュールをフッターへ自動挿入するカスタムTwig拡張(HoraireExtension)。
2. AJAXマルチ条件フィルターエンジン
SearchData、SearchForm、VehiculeRepository::findSearch()、非同期JavaScriptコントローラーを組み合わせた高度なファセット検索:
| 検索条件 |
UIコンポーネント |
Doctrine DQLクエリ |
| 価格帯 |
Dual-handle noUiSlider |
p.prix >= :prixmin AND p.prix <= :prixmax |
| 走行距離 |
Dual-handle noUiSlider |
p.kilometrage >= :kmmin AND p.kilometrage <= :kmmax |
| 年式 |
Dual-handle noUiSlider (1970 - 2026) |
p.annee >= :anneemin AND p.annee <= :anneemax |
| メーカー & モデル |
動的連動型ドロップダウンメニュー (/modeles/fetch) |
m.id IN (:marque) AND d.id IN (:modele) |
| ボディタイプ、燃料、カテゴリー |
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. ロールベースアクセス制御 (RBAC)
EasyAdminとSymfony Securityファイアウォールによる厳格な権限管理:
ROLE_ADMIN
管理者 (Vincent Parrot)
- 従業員アカウントの管理(登録、複雑性ポリシーに準拠したパスワードリセット)。
- 工場サービス内容、説明文、画像アセットの完全なCMS管理。
- 週間営業時間の設定および休業日・祝日の管理。
- 受信した顧客からの問い合わせ内容の確認および削除。
ROLE_EMPLOYE
工場スタッフ・従業員
- 中古車在庫の管理(新規登録、複数写真アップロード、装備オプション設定)。
- DB保存時にログイン中の従業員を作成者として自動関連付け。
- 顧客レビューの審査(正当なレビューの承認、またはスパムの却下)。
- 自身の権限を管理者へ昇格させる操作の完全制限。
4. ヘッドレストREST APIエンドポイント
モバイルアプリや外部連携ツール向けのセキュアなJSONエンドポイント:
| Method |
Endpoint URL |
操作概要 |
JSONレスポンス形式 |
| GET |
/api/vehicules |
販売中の全車両在庫リストを取得 |
JSON Array (JMS getVehicules group) |
| GET |
/api/vehiculesby?page={n} |
スムーズな読み込みのためのページ分割された車両一覧 |
{ data: [...], pagination: { ... } } |
| GET |
/api/vehicules/{id} |
指定IDの車両詳細スペックおよび画像ギャラリー |
JSON Object (Véhicule, Galerie, Options) |
| GET |
/api/marques-modeles |
メーカーおよび関連モデルの完全な階層データ |
[{ id, nom, modeles: [{ id, nom }] }] |
| POST |
/api/contact |
自動通知メール送信を伴う顧客問い合わせの登録 |
{ status: "success" } (HTTP 201) |
5. データモデル & Doctrineリレーション
MySQL上で外部キー制約を徹底した正規化リレーショナルスキーマ:
Vehicule & 画像エンティティ
複数写真を管理するVehiculeImageへのOneToManyカスケードと、EmployesへのManyToMany連携。
自動車データマスター
Marque、Modele、Carburant(ガソリン、ディーゼル、ハイブリッド、EV)、Categorie、Typeの正規化。
業務運用 & 問い合わせ
Service、Horaire、Temoignage(ブール値の承認フラグ付き)、Contactの専用エンティティ。
6. SEOアーキテクチャ & パフォーマンス
ローカルSEO & 構造化データ
AutoRepairおよびProduct/Car向けのSchema.orgマークアップ、トゥールーズ地域を狙ったキーワード設計、クリーンなURL。
パフォーマンス & 部分描画
検索時のデータ転送量を抑えるAJAX部分HTML/JSONレンダリング、VichUploaderによる画像最適化、全フォームでのCSRF保護。