<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class DefaultController extends AbstractController
{
/**
* @Route("/", name="home")
*/
public function index()
{
$slides = [
[
'title' => 'Nouveauté',
'subtitle' => 'Découvrez notre sélection 2025',
'image' => 'img/slides/slide-1.png',
'cta_text' => 'Voir la sélection',
'cta_link' => '/nouveautes'
],
[
'title' => 'Nouveauté',
'subtitle' => 'Découvrez notre sélection 2025',
'image' => 'img/slides/slide-2.png',
'cta_text' => 'Voir la sélection',
'cta_link' => '/nouveautes'
]
];
$features = [
[
'icon' => 'img/picto/shield.png',
'title' => 'Sécurité Garantie',
'text' => 'Tous nos produits sont normés et certifiés CE',
],
[
'icon' => 'img/picto/quality.png',
'title' => 'Engagement qualité',
'text' => 'Sélection rigoureuse des meilleurs équipements',
],
[
'icon' => 'img/picto/stopclock.png',
'title' => 'Respect & Durabilité',
'text' => 'Produits respectant le développement durable et le respect de l’environnement.',
],
];
$products = [
[
'slug' => 'harnais-antichute-5-points',
'name' => 'Harnais antichute 5 points',
'image' => 'img/products/produit-1.png',
'shortDescription' => 'Harnais complet EN 361, points dorsaux & sternaux.',
'price' => 129.90,
],
[
'slug' => 'harnais-antichute-leger',
'name' => 'Harnais antichute léger',
'image' => 'img/products/produit-2.png',
'shortDescription' => 'Modèle compact pour travaux de courte durée, EN 361.',
'price' => 89.50,
],
[
'slug' => 'gilet-haute-visibilite-cl2',
'name' => 'Gilet haute visibilité classe 2',
'image' => 'img/products/produit-3.png',
'shortDescription' => 'Polyester 120 g/m², bandes rétro-réfléchissantes 3M.',
'price' => 9.90,
],
[
'slug' => 'lot-3-casques-abs',
'name' => 'Lot de 3 casques ABS',
'image' => 'img/products/produit-4.png',
'shortDescription' => 'Casques ventilés EN 397, jugulaire 4 points.',
'price' => 59.00,
],
];
$categories = [
['slug' => 'protection-tete', 'name' => 'Protection tête', 'image' => 'img/picto-3d/picto-tete.png'],
['slug' => 'protection-main', 'name' => 'Protection main', 'image' => 'img/picto-3d/picto-main.png'],
['slug' => 'protection-pied', 'name' => 'Protection pied', 'image' => 'img/picto-3d/picto-pied.png'],
['slug' => 'protection-visuelle', 'name' => 'Protection visuelle', 'image' => 'img/picto-3d/picto-visuel.png'],
['slug' => 'haute-visibilite', 'name' => 'Haute visibilité', 'image' => 'img/picto-3d/picto-visibilite.png'],
['slug' => 'anti-chute', 'name' => 'Anti-chute', 'image' => 'img/picto-3d/picto-chute.png'],
['slug' => 'protection-respiratoire','name' => 'Protection respiratoire','image' => 'img/picto-3d/picto-respiratoire.png'],
['slug' => 'hss', 'name' => 'HSS', 'image' => 'img/picto-3d/picto-hss.png'],
['slug' => 'protection-froid', 'name' => 'Protection froid', 'image' => 'img/picto-3d/picto-froid.png'],
['slug' => 'multirisques', 'name' => 'Multirisques', 'image' => 'img/picto-3d/picto-multirisque.png'],
['slug' => 'protection-pluie', 'name' => 'Protection pluie', 'image' => 'img/picto-3d/picto-pluie.png'],
['slug' => 'vetements-travail', 'name' => 'Vêtements de travail', 'image' => 'img/picto-3d/picto-travail.png'],
['slug' => 'anti-bruit', 'name' => 'Protection anti-bruit', 'image' => 'img/picto-3d/picto-bruit.png'],
['slug' => 'jetable', 'name' => 'Jetable', 'image' => 'img/picto-3d/picto-jetables.png'],
['slug' => 'accessoires', 'name' => 'Accessoires', 'image' => 'img/picto-3d/picto-accessoires.png'],
];
return $this->render('default/index.html.twig', [
'slides' => $slides,
'features'=>$features,
'products'=>$products,
'categories'=>$categories
]);
}
/**
* @Route("/categorie/produit", name="category.produit")
*/
public function categoryProduit()
{
$products = [
[
'slug' => 'harnais-antichute-5-points',
'name' => 'Harnais antichute 5 points',
'image' => 'img/products/produit-1.png',
'shortDescription'=> 'Harnais EN 361 avec points d’ancrage dorsaux et sternaux.',
'price' => 129.90,
],
[
'slug' => 'corde-antichute-10m',
'name' => 'Corde antichute 10 m',
'image' => 'img/products/produit-8.png',
'shortDescription'=> 'Ligne de vie Ø 12 mm + absorbeur intégré, norme EN 353-2.',
'price' => 54.00,
],
[
'slug' => 'longe-simple-absorbeur',
'name' => 'Longe simple absorbeur',
'image' => 'img/products/produit-7.png',
'shortDescription'=> 'Sangle polyamide 1,5 m, crochet et absorbeur – EN 355.',
'price' => 29.50,
],
[
'slug' => 'mousqueton-acier-a-vis',
'name' => 'Mousqueton acier à vis',
'image' => 'img/products/produit-6.png',
'shortDescription'=> 'Ouverture 18 mm, résistance 25 kN (EN 362).',
'price' => 6.30,
],
[
'slug' => 'poulie-rescue-aluminium',
'name' => 'Poulie Rescue aluminium',
'image' => 'img/products/produit-9.png',
'shortDescription'=> 'Pour cordes Ø 8-13 mm, roulement étanche.',
'price' => 38.90,
],
[
'slug' => 'casque-chantier-abs',
'name' => 'Casque de chantier ABS',
'image' => 'img/products/produit-4.png',
'shortDescription'=> 'Casque ventilé avec jugulaire 4 points, norme EN 397.',
'price' => 21.50,
],
];
$subcategories = [
['name' => 'protection occulaire'],
['name' => 'protection pied'],
['name' => 'protection main'],
];
return $this->render('default/category.html.twig',[
'products'=>$products,
'subcategories'=>$subcategories
]);
}
/**
* @Route("/categorie/produit/{slug}", name="produit")
*/
public function produit($slug)
{
/* ---------- Catalogue "hard-codé" pour la démo ---------- */
$products = [
'harnais-antichute-5-points' => [
'id' => 1,
'name' => 'Harnais antichute 5 points',
'slug' => 'harnais-antichute-5-points',
'sku' => 'HN-5001',
'mainImage' => 'img/products/produit-1.png',
'gallery' => [
'img/products/produit-1.png',
'img/products/produit-1.png',
'img/products/produit-1.png',
],
'description' => 'Harnais de sécurité complet avec points d’ancrage dorsaux et sternaux. Confort optimal pour les travaux en hauteur. Norme EN 361.',
'sizes' => ['S', 'M', 'L', 'XL'],
'price' => 129.90,
],
'harnais-antichute-leger' => [
'id' => 2,
'name' => 'Harnais antichute léger',
'slug' => 'harnais-antichute-leger',
'sku' => 'HN-5002',
'mainImage' => 'img/products/produit-2.png',
'gallery' => [
'img/products/produit-2.png',
'img/products/produit-2.png',
],
'description' => 'Modèle compact pour interventions rapides, réglages simplifiés. EN 361.',
'sizes' => ['M', 'L', 'XL'],
'price' => 89.50,
],
'gilet-haute-visibilite-cl2' => [
'id' => 3,
'name' => 'Gilet haute visibilité classe 2',
'slug' => 'gilet-haute-visibilite-cl2',
'sku' => 'GHV-02',
'mainImage' => 'img/products/produit-3.png',
'gallery' => [
'img/products/produit-3.png',
'img/products/produit-3.png',
],
'description' => 'Polyester 120 g/m², bandes rétro-réfléchissantes 3M. Norme EN ISO 20471.',
'sizes' => ['M', 'L', 'XL', 'XXL'],
'price' => 9.90,
],
'lot-3-casques-abs' => [
'id' => 4,
'name' => 'Lot de 3 casques ABS',
'slug' => 'lot-3-casques-abs',
'sku' => 'CS-3X',
'mainImage' => 'img/products/produit-4.png',
'gallery' => [
'img/products/produit-4.png',
],
'description' => 'Casques ventilés EN 397 avec jugulaire 4 points. Coloris assortis.',
'sizes' => [], // non pertinent ici
'price' => 59.00,
],
'corde-antichute-10m' => [
'id' => 5,
'name' => 'Corde antichute 10 m',
'slug' => 'corde-antichute-10m',
'sku' => 'CD-10M',
'mainImage' => 'img/products/produit-8.png',
'gallery' => [
'img/products/produit-8.png',
'img/products/produit-8.png',
],
'description' => 'Ligne de vie Ø 12 mm avec absorbeur intégré. Norme EN 353-2.',
'sizes' => [],
'price' => 54.00,
],
'longe-simple-absorbeur' => [
'id' => 6,
'name' => 'Longe simple absorbeur',
'slug' => 'longe-simple-absorbeur',
'sku' => 'LS-150',
'mainImage' => 'img/products/produit-7.png',
'gallery' => [
'img/products/produit-7.png',
'img/products/produit-7.png',
],
'description' => 'Sangle polyamide 1,5 m avec absorbeur. Crochet acier. Norme EN 355.',
'sizes' => [],
'price' => 29.50,
],
'mousqueton-acier-a-vis' => [
'id' => 7,
'name' => 'Mousqueton acier à vis',
'slug' => 'mousqueton-acier-a-vis',
'sku' => 'MS-VIS',
'mainImage' => 'img/products/produit-6.png',
'gallery' => [
'img/products/produit-6.png',
'img/products/produit-6.png',
],
'description' => 'Mousqueton acier zingué avec verrouillage à vis. Résistance 25 kN. EN 362.',
'sizes' => [],
'price' => 6.30,
],
'poulie-rescue-aluminium' => [
'id' => 8,
'name' => 'Poulie Rescue aluminium',
'slug' => 'poulie-rescue-aluminium',
'sku' => 'PR-ALU',
'mainImage' => 'img/products/produit-9.png',
'gallery' => [
'img/products/produit-9.png',
'img/products/produit-9.png',
],
'description' => 'Poulie pour cordes Ø 8 à 13 mm. Roulement étanche. Aluminium haute résistance.',
'sizes' => [],
'price' => 38.90,
],
];
/* ---------- Sélection du produit courant ---------- */
if (!isset($products[$slug])) {
throw $this->createNotFoundException('Produit introuvable.');
}
$product = $products[$slug];
/* ---------- Produits liés (tous sauf le courant) ---------- */
$related = array_values(
array_filter($products, fn ($p) => $p['slug'] !== $slug)
);
/* ---------- Breadcrumb minimal ---------- */
/* $breadcrumbs = [
['label' => 'Catégorie démo', 'url' => $this->generateUrl('category', ['slug' => 'demo'])],
];*/
/* $related = [
[
'slug' => 'corde-antichute-10m',
'name' => 'Corde antichute 10 m',
'image' => 'images/products/corde-10m.jpg',
'shortDescription'=> 'Ligne de vie Ø 12 mm avec absorbeur intégré.',
'price' => 54.00,
],
[
'slug' => 'longe-simple-absorbeur',
'name' => 'Longe simple avec absorbeur',
'image' => 'images/products/longe-absorbeur.jpg',
'shortDescription'=> 'Sangle polyamide 1,5 m – EN 355.',
'price' => 29.50,
],
[
'slug' => 'mousqueton-acier-a-vis',
'name' => 'Mousqueton acier à vis',
'image' => 'images/products/mousqueton-vis.jpg',
'shortDescription'=> 'Ouverture 18 mm, résistance 25 kN.',
'price' => 6.30,
],
[
'slug' => 'poulie-rescue-aluminium',
'name' => 'Poulie Rescue aluminium',
'image' => 'images/products/poulie-rescue.jpg',
'shortDescription'=> 'Pour cordes Ø 8-13 mm, roulement étanche.',
'price' => 38.90,
],
];*/
$breadcrumbs = [
[
'label' => 'Anti-Chute',
'url' => $this->generateUrl('category.produit', ['slug' => 'anti-chute']),
],
[
'label' => 'Harnais',
'url' => $this->generateUrl('category.produit', ['slug' => 'harnais']),
],
];
return $this->render('default/produit.html.twig', [
'product'=>$product,
'related'=>$related,
'breadcrumbs'=>$breadcrumbs
]);
}
/**
* @Route("/contact", name="contact")
*/
public function contact()
{
return $this->render('default/contact.html.twig');
}
}