Error 500 Internal Server Error

GET https://forges-preprod.kwantic.dev/fr_FR/products/etui-en-cuir-buron-wc-26671

Forwarded to ErrorController (3e4bb6)

Exceptions

Impossible to access an attribute ("onHand") on a bool variable ("") in @SyliusShop/product/show.html.twig at line 86.

Exception

Twig\Error\ RuntimeError

Show exception properties
Twig\Error\RuntimeError {#13124
  -lineno: 86
  -rawMessage: "Impossible to access an attribute ("onHand") on a bool variable ("")."
  -source: Twig\Source {#12195
    -code: """
      {% extends '@SyliusShop/shared/layout/base.html.twig' %}\n
      \n
      {# On peut définir un titre de page dynamique ici #}\n
      {% block title %}\n
      \t{{ product.name }}\n
      \t- Les Forges de Laguiole\n
      {% endblock %}\n
      \n
      {# Contenu principal de la page produit #}\n
      {% block content %}\n
      \t<div\n
      \t\tclass="product-custom-page">\n
      \n
      \t\t{# --- BLOC 1: HERO PRODUIT --- #}\n
      \t\t<section\n
      \t\t\tclass="product-hero" data-controller="product-variant">\n
      \t\t\t{# GALERIE A GAUCHE #}\n
      \t\t\t<div\n
      \t\t\t\tclass="gallery-wrapper" id="galleryWrapper">\n
      \n
      \t\t\t\t{# PANNEAU DE PERSONNALISATION #}\n
      \t\t\t\t{% if product.isEngravable %}\n
      \t\t\t\t\t<div class="customization-panel">\n
      \t\t\t\t\t\t{{ render(controller('App\\Controller\\ProductController::renderCustomizationPanel', {'productId': product.id})) }}\n
      \t\t\t\t\t</div>\n
      \t\t\t\t{% endif %}\n
      \n
      \t\t\t\t{# 2. LE CONTENEUR IMAGE #}\n
      \t\t\t\t<div class="image-area-wrapper">\n
      \t\t\t\t\t<div class="main-image-container" id="product-gallery">\n
      \t\t\t\t\t\t{% set defaultVariant = product.enabledVariants|first %}\n
      \t\t\t\t\t\t{% set initialImages = defaultVariant and defaultVariant.images|length > 0 ? defaultVariant.images : product.images %}\n
      \n
      \t\t\t\t\t\t{% if initialImages|length > 0 %}\n
      \t\t\t\t\t\t\t{% for image in initialImages %}\n
      \t\t\t\t\t\t\t\t<img src="{{ image.path|imagine_filter('sylius_shop_product_original') }}" class="main-image {% if loop.first %}active{% endif %}" data-index="{{ loop.index0 }}" data-product-variant-target="image">\n
      \t\t\t\t\t\t\t{% endfor %}\n
      \t\t\t\t\t\t{% else %}\n
      \t\t\t\t\t\t\t<img src="https://via.placeholder.com/800x400" class="main-image active">\n
      \t\t\t\t\t\t{% endif %}\n
      \t\t\t\t\t</div>\n
      \n
      \t\t\t\t\t{# 3. CONTROLES (Flèches + Bouton) #}\n
      \t\t\t\t\t<div class="gallery-controls">\n
      \t\t\t\t\t\t<div class="nav-elements">\n
      \t\t\t\t\t\t\t<button class="nav-arrow prev-slide">\n
      \t\t\t\t\t\t\t\t<svg width="8" height="8" viewbox="0 0 8 8" fill="none" xmlns="http://www.w3.org/2000/svg">\n
      \t\t\t\t\t\t\t\t\t<path d="M0.146447 4.03568C-0.0488157 3.84042 -0.0488157 3.52384 0.146447 3.32857L3.32843 0.146595C3.52369 -0.0486675 3.84027 -0.0486675 4.03553 0.146595C4.2308 0.341857 4.2308 0.658439 4.03553 0.853702L1.20711 3.68213L4.03553 6.51056C4.2308 6.70582 4.2308 7.0224 4.03553 7.21766C3.84027 7.41292 3.52369 7.41292 3.32843 7.21766L0.146447 4.03568ZM7.5 3.68213L7.5 4.18213L0.5 4.18213L0.5 3.68213L0.5 3.18213L7.5 3.18213L7.5 3.68213Z" fill="black"/>\n
      \t\t\t\t\t\t\t\t</svg>\n
      \t\t\t\t\t\t\t</button>\n
      \t\t\t\t\t\t\t<div class="progress-container">\n
      \t\t\t\t\t\t\t\t<div class="progress-bar"></div>\n
      \t\t\t\t\t\t\t</div>\n
      \t\t\t\t\t\t\t<button class="nav-arrow next-slide">\n
      \t\t\t\t\t\t\t\t<svg width="8" height="8" viewbox="0 0 8 8" fill="none" xmlns="http://www.w3.org/2000/svg">\n
      \t\t\t\t\t\t\t\t\t<path d="M7.35355 4.03568C7.54882 3.84042 7.54882 3.52384 7.35355 3.32857L4.17157 0.146595C3.97631 -0.0486675 3.65973 -0.0486675 3.46447 0.146595C3.2692 0.341857 3.2692 0.658439 3.46447 0.853702L6.29289 3.68213L3.46447 6.51056C3.2692 6.70582 3.2692 7.0224 3.46447 7.21766C3.65973 7.41292 3.97631 7.41292 4.17157 7.21766L7.35355 4.03568ZM0 3.68213L4.37114e-08 4.18213L7 4.18213L7 3.68213L7 3.18213L-4.37114e-08 3.18213L0 3.68213Z" fill="black"/>\n
      \t\t\t\t\t\t\t\t</svg>\n
      \t\t\t\t\t\t\t</button>\n
      \t\t\t\t\t\t</div>\n
      \n
      \t\t\t\t\t\t{# Le bouton Personnaliser #}\n
      \t\t\t\t\t\t{% if product.isEngravable() %}\n
      \t\t\t\t\t\t\t<button class="btn-animated btn-personalize" id="btnPersonalize" onclick="var g=document.getElementById('galleryWrapper');if(g){g.classList.toggle('custom-open');var t=this.querySelector('.text');if(t){t.innerText=g.classList.contains('custom-open')?'RETIRER LA PERSONNALISATION':'PERSONNALISER';}}">\n
      \t\t\t\t\t\t\t\t<span class="btn-icon">\n
      \t\t\t\t\t\t\t\t\t<svg width="8" height="8" viewbox="0 0 8 8" fill="none" xmlns="http://www.w3.org/2000/svg">\n
      \t\t\t\t\t\t\t\t\t\t<path d="M7.35355 4.03519C7.54882 3.83993 7.54882 3.52335 7.35355 3.32809L4.17157 0.146106C3.97631 -0.0491558 3.65973 -0.0491558 3.46447 0.146106C3.2692 0.341369 3.2692 0.657951 3.46447 0.853213L6.29289 3.68164L3.46447 6.51007C3.2692 6.70533 3.2692 7.02191 3.46447 7.21717C3.65973 7.41244 3.97631 7.41244 4.17157 7.21717L7.35355 4.03519ZM0 3.68164L4.37114e-08 4.18164L7 4.18164L7 3.68164L7 3.18164L-4.37114e-08 3.18164L0 3.68164Z" fill="black"></path>\n
      \t\t\t\t\t\t\t\t\t</svg>\n
      \t\t\t\t\t\t\t\t</span>\n
      \t\t\t\t\t\t\t\t<span class="text">PERSONNALISER</span>\n
      \t\t\t\t\t\t\t</button>\n
      \t\t\t\t\t\t{% endif %}\n
      \t\t\t\t\t</div>\n
      \t\t\t\t</div>\n
      \t\t\t</div>\n
      \n
      \t\t\t{# INFOS A DROITE #}\n
      \t\t\t<div class="product-info">\n
      \t\t\t\t<h1 class="collection-name">{{ product.mainTaxon ? product.mainTaxon.name : '' }}</h1>\n
      \t\t\t\t<h1 class="product-title" data-product-variant-target="name">{{ product.name }}</h1>\n
      \n
      \t\t\t\t<div class="product-reference" style="margin-top: -10px; margin-bottom: 10px; font-size: 0.9rem; color: #777; font-family: monospace; letter-spacing: 0.5px;">\n
      \t\t\t\t\tRef : <span data-product-variant-target="code">{{ product.variants.first.code|default(product.code) }}</span>\n
      \t\t\t\t</div>\n
      \n
      \t\t\t\t<div class="stock-status">\n
      \t\t\t\t\t{% if product.variants.first.onHand > 0 %}\n
      \t\t\t\t\t\tCE PRODUIT EST EN STOCK\n
      \t\t\t\t\t{% else %}\n
      \t\t\t\t\t\tRUPTURE DE STOCK\n
      \t\t\t\t\t{% endif %}\n
      \t\t\t\t</div>\n
      \n
      \t\t\t\t<div class="price">\n
      \t\t\t\t\t{% set variant = product.variants|first %}\n
      \n
      \t\t\t\t\t{% if variant is not null %}\n
      \t\t\t\t\t\t<span data-product-variant-target="price">{{ variant|sylius_calculate_price({'channel': sylius.channel})|sylius_format_money(sylius.channel.baseCurrency.code, app.request.locale) }}</span>\n
      \t\t\t\t\t{% endif %}\n
      \t\t\t\t</div>\n
      \n
      \t\t\t\t{# --- Swatches PDP (seulement si plus d'1 variante) --- #}\n
      \t\t\t\t{% if product.enabledVariants|length > 1 %}\n
      \t\t\t\t\t<div class="product-swatches mb-4" data-product-variant-target="swatches" style="display: flex; gap: 10px; margin-top: 15px; justify-content: center;">\n
      \t\t\t\t\t\t{% set uniqueOptions = {} %}\n
      \t\t\t\t\t\t{% for variant in product.enabledVariants %}\n
      \t\t\t\t\t\t\t{# Cherche l'option matière/manche de cette variante #}\n
      \t\t\t\t\t\t\t{% set targetOptionVal = null %}\n
      \t\t\t\t\t\t\t{% for optionValue in variant.optionValues %}\n
      \t\t\t\t\t\t\t\t{% if optionValue.option.code in ['manche', 'type_manche', 'matiere'] %}\n
      \t\t\t\t\t\t\t\t\t{% set targetOptionVal = optionValue %}\n
      \t\t\t\t\t\t\t\t{% endif %}\n
      \t\t\t\t\t\t\t{% endfor %}\n
      \n
      \t\t\t\t\t\t\t{# Fallback: première option #}\n
      \t\t\t\t\t\t\t{% if targetOptionVal is null and variant.optionValues|length > 0 %}\n
      \t\t\t\t\t\t\t\t{% set targetOptionVal = variant.optionValues|first %}\n
      \t\t\t\t\t\t\t{% endif %}\n
      \n
      \t\t\t\t\t\t\t{% if targetOptionVal and uniqueOptions[targetOptionVal.code] is not defined %}\n
      \t\t\t\t\t\t\t\t{% set uniqueOptions = uniqueOptions|merge({(targetOptionVal.code): targetOptionVal}) %}\n
      \n
      \t\t\t\t\t\t\t\t{# Image de la variante #}\n
      \t\t\t\t\t\t\t\t{% set variantImage = asset('assets/shop/img/placeholder.png') %}\n
      \t\t\t\t\t\t\t\t{% set srcCollection = product.images %}\n
      \t\t\t\t\t\t\t\t{% if product.images|length > 0 %}\n
      \t\t\t\t\t\t\t\t\t{% set variantImage = product.images.first.path|imagine_filter('sylius_shop_product_original') %}\n
      \t\t\t\t\t\t\t\t{% endif %}\n
      \t\t\t\t\t\t\t\t{% if variant.images|length > 0 %}\n
      \t\t\t\t\t\t\t\t\t{% set variantImage = variant.images.first.path|imagine_filter('sylius_shop_product_original') %}\n
      \t\t\t\t\t\t\t\t\t{% set srcCollection = variant.images %}\n
      \t\t\t\t\t\t\t\t{% endif %}\n
      \n
      \t\t\t\t\t\t\t\t{% set variantImagesSrc = [] %}\n
      \t\t\t\t\t\t\t\t{% for img in srcCollection %}\n
      \t\t\t\t\t\t\t\t\t{% set variantImagesSrc = variantImagesSrc|merge([img.path|imagine_filter('sylius_shop_product_original')]) %}\n
      \t\t\t\t\t\t\t\t{% endfor %}\n
      \n
      \t\t\t\t\t\t\t\t{# Icône ou Couleur du swatch #}\n
      \t\t\t\t\t\t\t\t{% set swatchColor = targetOptionVal.color|default('') %}\n
      \t\t\t\t\t\t\t\t{% set swatchIcon = targetOptionVal.iconName|default('') ? vich_uploader_asset(targetOptionVal, 'iconFile') : '' %}\n
      \t\t\t\t\t\t\t\t{% set swatchStyle = '' %}\n
      \n
      \t\t\t\t\t\t\t\t{% if swatchIcon %}\n
      \t\t\t\t\t\t\t\t\t{% set swatchStyle = 'background-image: url(' ~ swatchIcon ~ '); background-size: cover; background-position: center;' %}\n
      \t\t\t\t\t\t\t\t{% elseif swatchColor %}\n
      \t\t\t\t\t\t\t\t\t{% set swatchStyle = 'background-color: ' ~ swatchColor ~ '; background-image: none;' %}\n
      \t\t\t\t\t\t\t\t{% endif %}\n
      \n
      \t\t\t\t\t\t\t\t{% set displayedName = product.name ~ ' - ' ~ targetOptionVal.value %}\n
      \t\t\t\t\t\t\t\t{% set variantPrice = variant|sylius_calculate_price({'channel': sylius.channel})|sylius_format_money(sylius.channel.baseCurrency.code, app.request.locale) %}\n
      \t\t\t\t\t\t\t\t{% set optionsData = [] %}\n
      \t\t\t\t\t\t\t\t{% for o in variant.optionValues %}\n
      \t\t\t\t\t\t\t\t\t{% set optLabel = o.option.code == 'matiere' ? 'Matière manche' : (o.option.code == 'taille' ? 'Longueur lame' : o.option.name) %}\n
      \t\t\t\t\t\t\t\t\t{% set optionsData = optionsData|merge([{ 'code': o.option.code, 'label': optLabel, 'value': o.value }]) %}\n
      \t\t\t\t\t\t\t\t{% endfor %}\n
      \n
      \t\t\t\t\t\t\t\t<span class="swatch" style="{{ swatchStyle }}; width: 32px; height: 32px; border-radius: 50%; display: inline-block; cursor: pointer; border: 1px solid #ddd; outline-offset: 2px; overflow: hidden;" data-action="click->product-variant#switchImage" data-image="{{ variantImage }}" data-gallery="{{ variantImagesSrc|json_encode|e('html_attr') }}" data-color="{{ targetOptionVal.value }}" data-price="{{ variantPrice }}" data-name="{{ displayedName }}" title="{{ targetOptionVal.value }}" data-variant-code="{{ variant.code }}" data-options="{{ optionsData|json_encode|e('html_attr') }}"></span>\n
      \t\t\t\t\t\t\t{% endif %}\n
      \t\t\t\t\t\t{% endfor %}\n
      \t\t\t\t\t</div>\n
      \t\t\t\t{% endif %}\n
      \n
      \t\t\t\t{# Formulaire d'ajout au panier #}\n
      \t\t\t\t{% include '@SyliusShop/product/show/_addToCart.html.twig' %}\n
      \t\t\t</div>\n
      \t\t</section>\n
      \n
      \t\t{# --- BLOC 2: DETAILS --- #}\n
      \t\t<section class="product-details-grid container">\n
      \t\t\t<div class="detail-column detail-column--wide">\n
      \t\t\t\t<h3 class="subtitle-serif top bold" style="margin-bottom: 20px;">Description</h3>\n
      \t\t\t\t<div class="detail-text">\n
      \t\t\t\t\t{{ product.description|replace({'\\n': ''})|raw }}\n
      \t\t\t\t</div>\n
      \t\t\t</div>\n
      \n
      \t\t\t{#<div class="detail-column right-sidebar">#}\n
      \t\t\t{#{% set collaboration = null %}#}\n
      \t\t\t{#{% for attributeValue in product.attributes %}#}\n
      \t\t\t{#{% if attributeValue.code == 'collaboration' %}#}\n
      \t\t\t{#{% set collaboration = attributeValue %}#}\n
      \t\t\t{#{% endif %}#}\n
      \t\t\t{#{% endfor %}#}\n
      \n
      \t\t\t{#{% if collaboration %}#}\n
      \t\t\t{#<div class="collab-block mb-4">#}\n
      \t\t\t{#<h3 class="subtitle-serif top bold">en collaboration</h3>#}\n
      \t\t\t{#<h3 class="subtitle-serif bottom">avec</h3>#}\n
      \t\t\t{#<div class="collab-logo">{{ collaboration.value }}</div>#}\n
      \t\t\t{#</div>#}\n
      \t\t\t{#{% endif %}#}\n
      \n
      \t\t\t{# --- ATTRIBUTS PRODUIT --- #}\n
      \t\t\t{#{% set iteratableAttributes = product.attributes|filter(a => a.code != 'collaboration' and a.code != 'brand') %}#}\n
      \t\t\t{#{% if iteratableAttributes|length > 0 %}#}\n
      \t\t\t{#<div class="attributes-info mb-4">#}\n
      \t\t\t{#<h3 class="attributes-title">Caractéristiques</h3>#}\n
      \t\t\t{#<div class="attributes-grid">#}\n
      \t\t\t{#{% for attributeValue in iteratableAttributes %}#}\n
      \t\t\t{#<div class="attribute-item">#}\n
      \t\t\t{#<span class="attribute-label">{{ attributeValue.name }}</span>#}\n
      \t\t\t{#<span class="attribute-value">#}\n
      \t\t\t{#{% if attributeValue.value is iterable %}#}\n
      \t\t\t{#{{ attributeValue.value|join(', ') }}#}\n
      \t\t\t{#{% else %}#}\n
      \t\t\t{#{{ attributeValue.value }}#}\n
      \t\t\t{#{% endif %}#}\n
      \t\t\t{#</span>#}\n
      \t\t\t{#</div>#}\n
      \t\t\t{#{% endfor %}#}\n
      \t\t\t{#</div>#}\n
      \t\t\t{#</div>#}\n
      \t\t\t{#{% endif %}#}\n
      \n
      \t\t\t{#</div>#}\n
      \n
      \t\t\t\t<div class="detail-column right-sidebar"> <div class="collab-block mb-4">\n
      \t\t\t\t\t<h3 class="subtitle-serif top bold">en collaboration</h3>\n
      \t\t\t\t\t<h3 class="subtitle-serif bottom">avec</h3>\n
      \t\t\t\t\t<div class="collab-logo">\n
      \t\t\t\t\t\t<img src="/images/logo_colla.png" alt="logo collaboration">\n
      \n
      \t\t\t\t\t</div>\n
      \t\t\t\t</div>\n
      \n
      \n
      \t\t\t</div>\n
      \n
      \t\t\t<div class="part_right_product_detail">\n
      \t\t\t\t<div class="attributes-info mb-4">\n
      \t\t\t\t\t<h3 class="attributes-title">Caractéristiques</h3>\n
      \t\t\t\t\t<div class="attributes-grid" id="product-characteristics">\n
      \t\t\t\t\t\t{% for attributeValue in product.getAttributesByLocale(app.request.locale, sylius.channel.defaultLocale.code)|filter(a => a.code != 'collaboration' and a.code != 'brand') %}\n
      \t\t\t\t\t\t\t<div class="attribute-item">\n
      \t\t\t\t\t\t\t\t<span class="attribute-label">{{ attributeValue.name }}</span>\n
      \t\t\t\t\t\t\t\t<span class="attribute-value">\n
      \t\t\t\t\t\t\t\t\t{% if attributeValue.value is iterable %}\n
      \t\t\t\t\t\t\t\t\t\t{{ attributeValue.value|join(', ') }}\n
      \t\t\t\t\t\t\t\t\t{% else %}\n
      \t\t\t\t\t\t\t\t\t\t{{ attributeValue.value }}\n
      \t\t\t\t\t\t\t\t\t{% endif %}\n
      \t\t\t\t\t\t\t\t</span>\n
      \t\t\t\t\t\t\t</div>\n
      \t\t\t\t\t\t{% endfor %}\n
      \n
      \t\t\t\t\t\t<div id="variant-options-container" style="display: contents;">\n
      \t\t\t\t\t\t\t{% set defaultVariant = product.enabledVariants|first %}\n
      \t\t\t\t\t\t\t{% if defaultVariant %}\n
      \t\t\t\t\t\t\t\t{% for optVal in defaultVariant.optionValues %}\n
      \t\t\t\t\t\t\t\t\t<div class="attribute-item" data-option-code="{{ optVal.option.code }}">\n
      \t\t\t\t\t\t\t\t\t\t<span class="attribute-label">\n
      \t\t\t\t\t\t\t\t\t\t\t{% if optVal.option.code == 'matiere' %}\n
      \t\t\t\t\t\t\t\t\t\t\t\tMatière manche\n
      \t\t\t\t\t\t\t\t\t\t\t{% elseif optVal.option.code == 'taille' %}\n
      \t\t\t\t\t\t\t\t\t\t\t\tLongueur lame\n
      \t\t\t\t\t\t\t\t\t\t\t{% else %}\n
      \t\t\t\t\t\t\t\t\t\t\t\t{{ optVal.option.name }}\n
      \t\t\t\t\t\t\t\t\t\t\t{% endif %}\n
      \t\t\t\t\t\t\t\t\t\t</span>\n
      \t\t\t\t\t\t\t\t\t\t<span class="attribute-value">{{ optVal.value }}</span>\n
      \t\t\t\t\t\t\t\t\t</div>\n
      \t\t\t\t\t\t\t\t{% endfor %}\n
      \t\t\t\t\t\t\t{% endif %}\n
      \t\t\t\t\t\t</div>\n
      \t\t\t\t\t</div>\n
      \t\t\t\t</div>\n
      \t\t\t</div>\n
      \t\t</section>\n
      \n
      \t\t<section class="shipping-info">\n
      \t\t\t<div class="reassurance">\n
      \t\t\t\t<div class="re-item">\n
      \t\t\t\t\t<div class="re-ico">\n
      \t\t\t\t\t\t<svg viewbox="0 0 22 22" xmlns="http://www.w3.org/2000/svg">\n
      \t\t\t\t\t\t\t<rect x="1" y="5" width="12" height="9" rx="1"></rect>\n
      \t\t\t\t\t\t\t<path d="M13 7h3.5l2.5 3v4.5h-3"></path>\n
      \t\t\t\t\t\t\t<circle cx="5.5" cy="15.5" r="1.8"></circle>\n
      \t\t\t\t\t\t\t<circle cx="16" cy="15.5" r="1.8"></circle>\n
      \t\t\t\t\t\t</svg>\n
      \t\t\t\t\t</div>\n
      \t\t\t\t\t<span class="re-txt">Expédition sous 48h<br>partenaires premium</span>\n
      \t\t\t\t</div>\n
      \t\t\t\t<div class="re-item">\n
      \t\t\t\t\t<div class="re-ico">\n
      \t\t\t\t\t\t<svg viewbox="0 0 22 22" xmlns="http://www.w3.org/2000/svg">\n
      \t\t\t\t\t\t\t<circle cx="11" cy="11" r="9"></circle>\n
      \t\t\t\t\t\t\t<path d="M11 5.5v5.5l3.5 2"></path>\n
      \t\t\t\t\t\t</svg>\n
      \t\t\t\t\t</div>\n
      \t\t\t\t\t<span class="re-txt">Retour sous 14 jours<br>accompagné avec soin</span>\n
      \t\t\t\t</div>\n
      \t\t\t\t<div class="re-item">\n
      \t\t\t\t\t<div class="re-ico">\n
      \t\t\t\t\t\t<svg viewbox="0 0 22 22" xmlns="http://www.w3.org/2000/svg">\n
      \t\t\t\t\t\t\t<path d="M11 2.5l2.8 5.6 6.2.9-4.5 4.3 1.1 6.2L11 16.7 5.4 19.5l1.1-6.2L2 9l6.2-.9z"></path>\n
      \t\t\t\t\t\t</svg>\n
      \t\t\t\t\t</div>\n
      \t\t\t\t\t<span class="re-txt">Fabriqué à la main<br>à Laguiole, Aveyron</span>\n
      \t\t\t\t</div>\n
      \t\t\t</div>\n
      \t\t</section>\n
      \n
      \n
      \t\t{# SECTION IMMERSION #}\n
      \t\t<section class="immersion-block" id="immersionBlock">\n
      \t\t\t<div class="vertical-title-container">\n
      \t\t\t\t<div class="vertical-title">matières d'exception</div>\n
      \t\t\t</div>\n
      \n
      \t\t\t{% if product.immersionImages|length > 0 %}\n
      \t\t\t\t<div class="immersion-text-wrapper">\n
      \t\t\t\t\t{% for immersion in product.immersionImages %}\n
      \t\t\t\t\t\t<div\n
      \t\t\t\t\t\t\tclass="immersion-text-item {% if loop.first %}active{% endif %}" data-index="{{ loop.index0 }}">\n
      \n
      \t\t\t\t\t\t\t{# Standard prefix #}\n
      \t\t\t\t\t\t\t<h2 class="subtitle-serif bottom">{{ immersion.title }}</h2>\n
      \t\t\t\t\t\t</div>\n
      \t\t\t\t\t{% endfor %}\n
      \t\t\t\t</div>\n
      \n
      \t\t\t\t<div class="immersion-slider-wrapper">\n
      \t\t\t\t\t<div class="immersion-images-stack">\n
      \t\t\t\t\t\t{% for immersion in product.immersionImages %}\n
      \t\t\t\t\t\t\t{% if immersion.path is not empty %}\n
      \t\t\t\t\t\t\t\t<img src="{{ immersion.path|imagine_filter('sylius_shop_product_original') }}" class="immersion-img {% if loop.first %}active{% endif %}" data-index="{{ loop.index0 }}" alt="{{ immersion.title }}">\n
      \t\t\t\t\t\t\t{% endif %}\n
      \t\t\t\t\t\t{% endfor %}\n
      \t\t\t\t\t</div>\n
      \n
      \t\t\t\t\t<div class="immersion-nav">\n
      \t\t\t\t\t\t<button class="immersion-btn prev-immersion">\n
      \t\t\t\t\t\t\t<svg width="8" height="8" viewbox="0 0 8 8" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0.146447 4.03568C-0.0488157 3.84042 -0.0488157 3.52384 0.146447 3.32857L3.32843 0.146595C3.52369 -0.0486675 3.84027 -0.0486675 4.03553 0.146595C4.2308 0.341857 4.2308 0.658439 4.03553 0.853702L1.20711 3.68213L4.03553 6.51056C4.2308 6.70582 4.2308 7.0224 4.03553 7.21766C3.84027 7.41292 3.52369 7.41292 3.32843 7.21766L0.146447 4.03568ZM7.5 3.68213L7.5 4.18213L0.5 4.18213L0.5 3.68213L0.5 3.18213L7.5 3.18213L7.5 3.68213Z" fill="black"/></svg>\n
      \t\t\t\t\t\t</button>\n
      \t\t\t\t\t\t<button class="immersion-btn next-immersion">\n
      \t\t\t\t\t\t\t<svg width="8" height="8" viewbox="0 0 8 8" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M7.35355 4.03568C7.54882 3.84042 7.54882 3.52384 7.35355 3.32857L4.17157 0.146595C3.97631 -0.0486675 3.65973 -0.0486675 3.46447 0.146595C3.2692 0.341857 3.2692 0.658439 3.46447 0.853702L6.29289 3.68213L3.46447 6.51056C3.2692 6.70582 3.2692 7.0224 3.46447 7.21766C3.65973 7.41292 3.97631 7.41292 4.17157 7.21766L7.35355 4.03568ZM0 3.68213L4.37114e-08 4.18213L7 4.18213L7 3.68213L7 3.18213L-4.37114e-08 3.18213L0 3.68213Z" fill="black"/></svg>\n
      \t\t\t\t\t\t</button>\n
      \t\t\t\t\t</div>\n
      \t\t\t\t</div>\n
      \t\t\t{% else %}\n
      \t\t\t\t{# Fallback Statique original si aucune image immersion n'est définie #}\n
      \t\t\t\t<div class="immersion-text-wrapper">\n
      \t\t\t\t\t<div class="immersion-text-item active" data-index="0">\n
      \t\t\t\t\t\t<h2 class="subtitle-serif top">manche</h2>\n
      \t\t\t\t\t\t<h2 class="subtitle-serif bottom">bois d'olivier</h2>\n
      \t\t\t\t\t</div>\n
      \t\t\t\t\t<div class="immersion-text-item" data-index="1">\n
      \t\t\t\t\t\t<h2 class="subtitle-serif top">lame</h2>\n
      \t\t\t\t\t\t<h2 class="subtitle-serif bottom">acier brut</h2>\n
      \t\t\t\t\t</div>\n
      \t\t\t\t\t<div class="immersion-text-item" data-index="2">\n
      \t\t\t\t\t\t<h2 class="subtitle-serif top">finition</h2>\n
      \t\t\t\t\t\t<h2 class="subtitle-serif bottom">brossée</h2>\n
      \t\t\t\t\t</div>\n
      \t\t\t\t</div>\n
      \n
      \t\t\t\t<div class="immersion-slider-wrapper">\n
      \t\t\t\t\t<div class="immersion-images-stack">\n
      \t\t\t\t\t\t<img src="https://via.placeholder.com/600x600/C4A484/333?text=Bois" class="immersion-img active" data-index="0">\n
      \t\t\t\t\t\t<img src="https://via.placeholder.com/600x600/555555/FFF?text=Acier" class="immersion-img" data-index="1">\n
      \t\t\t\t\t\t<img src="https://via.placeholder.com/600x600/999999/000?text=Finition" class="immersion-img" data-index="2">\n
      \t\t\t\t\t</div>\n
      \n
      \t\t\t\t\t<div class="immersion-nav">\n
      \t\t\t\t\t\t<button class="immersion-btn prev-immersion">\n
      \t\t\t\t\t\t\t<svg width="8" height="8" viewbox="0 0 8 8" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0.146447 4.03568C-0.0488157 3.84042 -0.0488157 3.52384 0.146447 3.32857L3.32843 0.146595C3.52369 -0.0486675 3.84027 -0.0486675 4.03553 0.146595C4.2308 0.341857 4.2308 0.658439 4.03553 0.853702L1.20711 3.68213L4.03553 6.51056C4.2308 6.70582 4.2308 7.0224 4.03553 7.21766C3.84027 7.41292 3.52369 7.41292 3.32843 7.21766L0.146447 4.03568ZM7.5 3.68213L7.5 4.18213L0.5 4.18213L0.5 3.68213L0.5 3.18213L7.5 3.18213L7.5 3.68213Z" fill="black"/></svg>\n
      \t\t\t\t\t\t</button>\n
      \t\t\t\t\t\t<button class="immersion-btn next-immersion">\n
      \t\t\t\t\t\t\t<svg width="8" height="8" viewbox="0 0 8 8" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M7.35355 4.03568C7.54882 3.84042 7.54882 3.52384 7.35355 3.32857L4.17157 0.146595C3.97631 -0.0486675 3.65973 -0.0486675 3.46447 0.146595C3.2692 0.341857 3.2692 0.658439 3.46447 0.853702L6.29289 3.68213L3.46447 6.51056C3.2692 6.70582 3.2692 7.0224 3.46447 7.21766C3.65973 7.41292 3.97631 7.41292 4.17157 7.21766L7.35355 4.03568ZM0 3.68213L4.37114e-08 4.18213L7 4.18213L7 3.68213L7 3.18213L-4.37114e-08 3.18213L0 3.68213Z" fill="black"/></svg>\n
      \t\t\t\t\t\t</button>\n
      \t\t\t\t\t</div>\n
      \t\t\t\t</div>\n
      \t\t\t{% endif %}\n
      \t\t</section>\n
      \n
      \t</div>\n
      \t{# --- Section Créez votre couteau --- #}\n
      \t<section class="entretenircouteaucta py-5">\n
      \t\t<div class="container text-center">\n
      \t\t\t<h2 class="subtitle-serif top bold">comment</h2>\n
      \t\t\t<h2 class="subtitle-serif bottom">l’entretenir</h2>\n
      \n
      \t\t\t<p class="text-desc">\n
      \t\t\t\tPour préserver l’éclat et l’excellence de votre pièce, adoptez un entretien délicat et minutieux, fidèle à son raffinement unique.\n
      \t\t\t</p>\n
      \n
      \t\t\t<div class="tradition-image-wrapper">\n
      \t\t\t\t<img src="{{ asset('/images/img-couteau-homepage.jpg', 'shop') }}" alt="{{ 'app.home.tradition.image_alt'|trans }}" class="img-fluid">\n
      \t\t\t</div>\n
      \t\t\t<a href="#" class="btn-animated mt-4">\n
      \t\t\t\t<span class="btn-icon">\n
      \t\t\t\t\t<svg width="8" height="8" viewbox="0 0 8 8" fill="none" xmlns="http://www.w3.org/2000/svg">\n
      \t\t\t\t\t\t<path d="M7.35355 4.03519C7.54882 3.83993 7.54882 3.52335 7.35355 3.32809L4.17157 0.146106C3.97631 -0.0491558 3.65973 -0.0491558 3.46447 0.146106C3.2692 0.341369 3.2692 0.657951 3.46447 0.853213L6.29289 3.68164L3.46447 6.51007C3.2692 6.70533 3.2692 7.02191 3.46447 7.21717C3.65973 7.41244 3.97631 7.41244 4.17157 7.21717L7.35355 4.03519ZM0 3.68164L4.37114e-08 4.18164L7 4.18164L7 3.68164L7 3.18164L-4.37114e-08 3.18164L0 3.68164Z" fill="black"/>\n
      \t\t\t\t\t</svg>\n
      \t\t\t\t</span>\n
      \t\t\t\t<span class="text">Découvrez nos conseils d’entretien</span>\n
      \t\t\t</a>\n
      \t\t</div>\n
      \t</section>\n
      \n
      \t{# SECTION PRODUITS ICONICS #}\n
      \t{% include '@SyliusShop/shared/components/iconic_carousel.html.twig' with {\n
              'hide_bottom_title': true\n
          } %}\n
      \n
      \t{# --- SECTION NEWSLETTER --- #}\n
      \t{% include '@SyliusShop/shared/components/newsletter.html.twig' %}\n
      \n
      {% endblock %}\n
      \n
      {% block stylesheets %}\n
      \t{{ parent() }}\n
      \t<link rel="stylesheet" href="{{ asset('build/app/shop/shop-product-page.css') }}">\n
      {% endblock %}\n
      \n
      {% block javascripts %}\n
      \t{{ parent() }}\n
      \t<script src="{{ asset('build/app/shop/shop-product-page.js') }}"></script>\n
      {% endblock %}\n
      """
    -name: "@SyliusShop/product/show.html.twig"
    -path: "/home/forges/subdomains/preprod/templates/bundles/SyliusShopBundle/product/show.html.twig"
  }
  -phpFile: "/home/forges/subdomains/preprod/vendor/twig/twig/src/Extension/CoreExtension.php"
  -phpLine: 1743
}
  1.                 <div class="product-reference" style="margin-top: -10px; margin-bottom: 10px; font-size: 0.9rem; color: #777; font-family: monospace; letter-spacing: 0.5px;">
  2.                     Ref : <span data-product-variant-target="code">{{ product.variants.first.code|default(product.code) }}</span>
  3.                 </div>
  4.                 <div class="stock-status">
  5.                     {% if product.variants.first.onHand > 0 %}
  6.                         CE PRODUIT EST EN STOCK
  7.                     {% else %}
  8.                         RUPTURE DE STOCK
  9.                     {% endif %}
  10.                 </div>
  1. \t\t\t\t</div>
  2. \t\t\t\t<div class=\"stock-status\">
  3. \t\t\t\t\t";
  4.         // line 86
  5.         if ((CoreExtension::getAttribute($this->env$this->sourceCoreExtension::getAttribute($this->env$this->sourceCoreExtension::getAttribute($this->env$this->source, (isset($context["product"]) || array_key_exists("product"$context) ? $context["product"] : (function () { throw new RuntimeError('Variable "product" does not exist.'86$this->source); })()), "variants", [], "any"falsefalsefalse86), "first", [], "any"falsefalsefalse86), "onHand", [], "any"falsefalsefalse86) > 0)) {
  6.             // line 87
  7.             yield "\t\t\t\t\t\tCE PRODUIT EST EN STOCK
  8. \t\t\t\t\t";
  9.         } else {
  10.             // line 89
in vendor/twig/twig/src/Template.php -> block_content (line 446)
  1.             throw new \LogicException('A block must be a method on a \Twig\Template instance.');
  2.         }
  3.         if (null !== $template) {
  4.             try {
  5.                 yield from $template->$block($context$blocks);
  6.             } catch (Error $e) {
  7.                 if (!$e->getSourceContext()) {
  8.                     $e->setSourceContext($template->getSourceContext());
  9.                 }
  1.         // line 38
  2.         yield "
  3. \t\t\t\t";
  4.         // line 40
  5.         yield from $this->unwrap()->yieldBlock('content'$context$blocks);
  6.         // line 41
  7.         yield "
  8. \t\t\t\t";
  9.         // line 43
in vendor/twig/twig/src/Template.php -> block_body (line 446)
  1.             throw new \LogicException('A block must be a method on a \Twig\Template instance.');
  2.         }
  3.         if (null !== $template) {
  4.             try {
  5.                 yield from $template->$block($context$blocks);
  6.             } catch (Error $e) {
  7.                 if (!$e->getSourceContext()) {
  8.                     $e->setSourceContext($template->getSourceContext());
  9.                 }
  1.         yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("sylius_shop_cart_summary");
  2.         yield "\">
  3. \t\t";
  4.         // line 30
  5.         yield from $this->unwrap()->yieldBlock('body'$context$blocks);
  6.         // line 50
  7.         yield "
  8. \t\t";
  9.         // line 51
  10.         yield from $this->unwrap()->yieldBlock('javascripts'$context$blocks);
in vendor/twig/twig/src/Template.php -> doDisplay (line 402)
  1.     {
  2.         $context += $this->env->getGlobals();
  3.         $blocks array_merge($this->blocks$blocks);
  4.         try {
  5.             yield from $this->doDisplay($context$blocks);
  6.         } catch (Error $e) {
  7.             if (!$e->getSourceContext()) {
  8.                 $e->setSourceContext($this->getSourceContext());
  9.             }
  1.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  2.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "template""@SyliusShop/product/show.html.twig"));
  3.         $this->parent $this->load("@SyliusShop/shared/layout/base.html.twig"1);
  4.         yield from $this->parent->unwrap()->yield($contextarray_merge($this->blocks$blocks));
  5.         
  6.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  7.         
  8.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
in vendor/twig/twig/src/Template.php -> doDisplay (line 402)
  1.     {
  2.         $context += $this->env->getGlobals();
  3.         $blocks array_merge($this->blocks$blocks);
  4.         try {
  5.             yield from $this->doDisplay($context$blocks);
  6.         } catch (Error $e) {
  7.             if (!$e->getSourceContext()) {
  8.                 $e->setSourceContext($this->getSourceContext());
  9.             }
  1.         return $this->blocks;
  2.     }
  3.     public function display(array $context, array $blocks = []): void
  4.     {
  5.         foreach ($this->yield($context$blocks) as $data) {
  6.             echo $data;
  7.         }
  8.     }
  9.     public function render(array $context): string
in vendor/twig/twig/src/Template.php -> display (line 373)
  1.                 ob_start();
  2.             } else {
  3.                 ob_start(function () { return ''; });
  4.             }
  5.             try {
  6.                 $this->display($context);
  7.             } catch (\Throwable $e) {
  8.                 while (ob_get_level() > $level) {
  9.                     ob_end_clean();
  10.                 }
  1.         yield from $this->template->yieldBlock($name$context);
  2.     }
  3.     public function render(array $context = []): string
  4.     {
  5.         return $this->template->render($context);
  6.     }
  7.     /**
  8.      * @return void
  9.      */
  1.      * @throws SyntaxError  When an error occurred during compilation
  2.      * @throws RuntimeError When an error occurred during rendering
  3.      */
  4.     public function render($name, array $context = []): string
  5.     {
  6.         return $this->load($name)->render($context);
  7.     }
  8.     /**
  9.      * Displays a template.
  10.      *
  1.         if (null !== $block) {
  2.             return $this->container->get('twig')->load($view)->renderBlock($block$parameters);
  3.         }
  4.         return $this->container->get('twig')->render($view$parameters);
  5.     }
  6.     private function doRender(string $view, ?string $block, array $parameters, ?Response $responsestring $method): Response
  7.     {
  8.         $content $this->doRenderView($view$block$parameters$method);
  1.         return $this->container->get('twig')->render($view$parameters);
  2.     }
  3.     private function doRender(string $view, ?string $block, array $parameters, ?Response $responsestring $method): Response
  4.     {
  5.         $content $this->doRenderView($view$block$parameters$method);
  6.         $response ??= new Response();
  7.         if (200 === $response->getStatusCode()) {
  8.             foreach ($parameters as $v) {
  9.                 if ($v instanceof FormInterface && $v->isSubmitted() && !$v->isValid()) {
  1.      * If an invalid form is found in the list of parameters, a 422 status code is returned.
  2.      * Forms found in parameters are auto-cast to form views.
  3.      */
  4.     protected function render(string $view, array $parameters = [], ?Response $response null): Response
  5.     {
  6.         return $this->doRender($viewnull$parameters$response__FUNCTION__);
  7.     }
  8.     /**
  9.      * Renders a block in a view.
  10.      *
AbstractController->render() in src/Controller/ProductController.php (line 341)
  1.         $form $this->formFactory->createNamed('sylius_add_to_cart'AddToCartType::class, $addToCartCommand, ['product' => $product]);
  2.         // Fetch iconic products
  3.         $iconicProducts $this->findFlaggedProducts($this->productRepository'isIconic'$channel);
  4.         return $this->render('@SyliusShop/product/show.html.twig', [
  5.             'product' => $product,
  6.             'form' => $form->createView(),
  7.             'iconic_products' => $iconicProducts,
  8.         ]);
  9.     }
  1.         $this->dispatcher->dispatch($eventKernelEvents::CONTROLLER_ARGUMENTS);
  2.         $controller $event->getController();
  3.         $arguments $event->getArguments();
  4.         // call controller
  5.         $response $controller(...$arguments);
  6.         // view
  7.         if (!$response instanceof Response) {
  8.             $event = new ViewEvent($this$request$type$response$event);
  9.             $this->dispatcher->dispatch($eventKernelEvents::VIEW);
  1.         $request->headers->set('X-Php-Ob-Level', (string) ob_get_level());
  2.         $this->requestStack->push($request);
  3.         $response null;
  4.         try {
  5.             return $response $this->handleRaw($request$type);
  6.         } catch (\Throwable $e) {
  7.             if ($e instanceof \Error && !$this->handleAllThrowables) {
  8.                 throw $e;
  9.             }
  1.         if (!$this->handlingHttpCache) {
  2.             $this->resetServices true;
  3.         }
  4.         try {
  5.             return $this->getHttpKernel()->handle($request$type$catch);
  6.         } finally {
  7.             --$this->requestStackSize;
  8.         }
  9.     }
  1.     ) {
  2.     }
  3.     public function run(): int
  4.     {
  5.         $response $this->kernel->handle($this->request);
  6.         if (Kernel::VERSION_ID >= 60400) {
  7.             $response->send(false);
  8.             if (\function_exists('fastcgi_finish_request') && !$this->debug) {
in vendor/autoload_runtime.php -> run (line 32)
  1. $app $app(...$args);
  2. exit(
  3.     $runtime
  4.         ->getRunner($app)
  5.         ->run()
  6. );
require_once('/home/forges/subdomains/preprod/vendor/autoload_runtime.php') in public/index.php (line 5)
  1. <?php
  2. use App\Kernel;
  3. require_once dirname(__DIR__).'/vendor/autoload_runtime.php';
  4. return function (array $context) {
  5.     return new Kernel($context['APP_ENV'], (bool) $context['APP_DEBUG']);
  6. };

Logs

Level Channel Message
INFO 15:50:45 deprecation User Deprecated: The Liip\ImagineBundle\Templating\FilterTrait trait is deprecated since version 2.7 and will be removed in 3.0; use Twig instead.
{
    "exception": {}
}
INFO 15:50:45 deprecation User Deprecated: The Liip\ImagineBundle\Templating\FilterExtension class is deprecated since version 2.7 and will be removed in 3.0; configure "liip_imagine.twig.mode" to "lazy" instead.
{
    "exception": {}
}
INFO 15:50:45 doctrine Connecting with parameters {params}
{
    "params": {
        "driver": "pdo_mysql",
        "idle_connection_ttl": 600,
        "host": "127.0.0.1",
        "port": 3306,
        "user": "forges",
        "password": "<redacted>",
        "driverOptions": [],
        "defaultTableOptions": {
            "collation": "utf8mb4_unicode_ci"
        },
        "dbname": "forges-preprod",
        "charset": "utf8mb4"
    }
}
INFO 15:50:45 deprecation User Deprecated: Method "Payum\Core\Model\DetailsAggregateInterface::getDetails()" might add "?object" as a native return type declaration in the future. Do the same in implementation "Sylius\Bundle\PayumBundle\Model\PaymentSecurityToken" now to avoid errors or add an explicit @return annotation to suppress this message.
{
    "exception": {}
}
INFO 15:50:45 request Matched route "_profiler".
{
    "route": "_profiler",
    "route_parameters": {
        "_route": "_profiler",
        "_controller": "web_profiler.controller.profiler::panelAction",
        "token": "93d4f9"
    },
    "request_uri": "https://forges-preprod.kwantic.dev/_profiler/93d4f9",
    "method": "GET"
}
DEBUG 15:50:46 security Checking for authenticator support.
{
    "firewall_name": "shop",
    "authenticators": 3
}
DEBUG 15:50:46 security Checking support on authenticator.
{
    "firewall_name": "shop",
    "authenticator": "Symfony\\Component\\Security\\Http\\Authenticator\\Debug\\TraceableAuthenticator"
}
DEBUG 15:50:46 security Authenticator does not support the request.
{
    "firewall_name": "shop",
    "authenticator": "Symfony\\Component\\Security\\Http\\Authenticator\\Debug\\TraceableAuthenticator"
}
DEBUG 15:50:46 security Checking support on authenticator.
{
    "firewall_name": "shop",
    "authenticator": "Symfony\\Component\\Security\\Http\\Authenticator\\Debug\\TraceableAuthenticator"
}
DEBUG 15:50:46 security Authenticator does not support the request.
{
    "firewall_name": "shop",
    "authenticator": "Symfony\\Component\\Security\\Http\\Authenticator\\Debug\\TraceableAuthenticator"
}
DEBUG 15:50:46 security Checking support on authenticator.
{
    "firewall_name": "shop",
    "authenticator": "Symfony\\Component\\Security\\Http\\Authenticator\\Debug\\TraceableAuthenticator"
}
DEBUG 15:50:46 security Authenticator does not support the request.
{
    "firewall_name": "shop",
    "authenticator": "Symfony\\Component\\Security\\Http\\Authenticator\\Debug\\TraceableAuthenticator"
}
DEBUG 15:50:46 doctrine Executing statement: SELECT t0.code AS code_1, t0.name AS name_2, t0.color AS color_3, t0.description AS description_4, t0.enabled AS enabled_5, t0.hostname AS hostname_6, t0.created_at AS created_at_7, t0.updated_at AS updated_at_8, t0.id AS id_9, t0.theme_name AS theme_name_10, t0.tax_calculation_strategy AS tax_calculation_strategy_11, t0.contact_email AS contact_email_12, t0.contact_phone_number AS contact_phone_number_13, t0.skipping_shipping_step_allowed AS skipping_shipping_step_allowed_14, t0.skipping_payment_step_allowed AS skipping_payment_step_allowed_15, t0.account_verification_required AS account_verification_required_16, t0.shipping_address_in_checkout_required AS shipping_address_in_checkout_required_17, t0.default_locale_id AS default_locale_id_18, t19.code AS code_20, t19.created_at AS created_at_21, t19.updated_at AS updated_at_22, t19.id AS id_23, t0.base_currency_id AS base_currency_id_24, t25.code AS code_26, t25.created_at AS created_at_27, t25.updated_at AS updated_at_28, t25.id AS id_29, t0.default_tax_zone_id AS default_tax_zone_id_30, t0.menu_taxon_id AS menu_taxon_id_31, t0.shop_billing_data_id AS shop_billing_data_id_32, t0.channel_price_history_config_id AS channel_price_history_config_id_33 FROM sylius_channel t0 INNER JOIN sylius_locale t19 ON t0.default_locale_id = t19.id INNER JOIN sylius_currency t25 ON t0.base_currency_id = t25.id WHERE t0.hostname = ? AND t0.enabled = ? ORDER BY t0.id ASC LIMIT 1 (parameters: {params}, types: {types})
{
    "sql": "SELECT t0.code AS code_1, t0.name AS name_2, t0.color AS color_3, t0.description AS description_4, t0.enabled AS enabled_5, t0.hostname AS hostname_6, t0.created_at AS created_at_7, t0.updated_at AS updated_at_8, t0.id AS id_9, t0.theme_name AS theme_name_10, t0.tax_calculation_strategy AS tax_calculation_strategy_11, t0.contact_email AS contact_email_12, t0.contact_phone_number AS contact_phone_number_13, t0.skipping_shipping_step_allowed AS skipping_shipping_step_allowed_14, t0.skipping_payment_step_allowed AS skipping_payment_step_allowed_15, t0.account_verification_required AS account_verification_required_16, t0.shipping_address_in_checkout_required AS shipping_address_in_checkout_required_17, t0.default_locale_id AS default_locale_id_18, t19.code AS code_20, t19.created_at AS created_at_21, t19.updated_at AS updated_at_22, t19.id AS id_23, t0.base_currency_id AS base_currency_id_24, t25.code AS code_26, t25.created_at AS created_at_27, t25.updated_at AS updated_at_28, t25.id AS id_29, t0.default_tax_zone_id AS default_tax_zone_id_30, t0.menu_taxon_id AS menu_taxon_id_31, t0.shop_billing_data_id AS shop_billing_data_id_32, t0.channel_price_history_config_id AS channel_price_history_config_id_33 FROM sylius_channel t0 INNER JOIN sylius_locale t19 ON t0.default_locale_id = t19.id INNER JOIN sylius_currency t25 ON t0.base_currency_id = t25.id WHERE t0.hostname = ? AND t0.enabled = ? ORDER BY t0.id ASC LIMIT 1",
    "params": {
        "1": "forges-preprod.kwantic.dev",
        "2": 1
    },
    "types": {
        "1": 2,
        "2": 5
    }
}
DEBUG 15:50:46 doctrine Executing statement: SELECT t0.code AS code_1, t0.name AS name_2, t0.color AS color_3, t0.description AS description_4, t0.enabled AS enabled_5, t0.hostname AS hostname_6, t0.created_at AS created_at_7, t0.updated_at AS updated_at_8, t0.id AS id_9, t0.theme_name AS theme_name_10, t0.tax_calculation_strategy AS tax_calculation_strategy_11, t0.contact_email AS contact_email_12, t0.contact_phone_number AS contact_phone_number_13, t0.skipping_shipping_step_allowed AS skipping_shipping_step_allowed_14, t0.skipping_payment_step_allowed AS skipping_payment_step_allowed_15, t0.account_verification_required AS account_verification_required_16, t0.shipping_address_in_checkout_required AS shipping_address_in_checkout_required_17, t0.default_locale_id AS default_locale_id_18, t19.code AS code_20, t19.created_at AS created_at_21, t19.updated_at AS updated_at_22, t19.id AS id_23, t0.base_currency_id AS base_currency_id_24, t25.code AS code_26, t25.created_at AS created_at_27, t25.updated_at AS updated_at_28, t25.id AS id_29, t0.default_tax_zone_id AS default_tax_zone_id_30, t0.menu_taxon_id AS menu_taxon_id_31, t0.shop_billing_data_id AS shop_billing_data_id_32, t0.channel_price_history_config_id AS channel_price_history_config_id_33 FROM sylius_channel t0 INNER JOIN sylius_locale t19 ON t0.default_locale_id = t19.id INNER JOIN sylius_currency t25 ON t0.base_currency_id = t25.id WHERE t0.code = ? LIMIT 1 (parameters: {params}, types: {types})
{
    "sql": "SELECT t0.code AS code_1, t0.name AS name_2, t0.color AS color_3, t0.description AS description_4, t0.enabled AS enabled_5, t0.hostname AS hostname_6, t0.created_at AS created_at_7, t0.updated_at AS updated_at_8, t0.id AS id_9, t0.theme_name AS theme_name_10, t0.tax_calculation_strategy AS tax_calculation_strategy_11, t0.contact_email AS contact_email_12, t0.contact_phone_number AS contact_phone_number_13, t0.skipping_shipping_step_allowed AS skipping_shipping_step_allowed_14, t0.skipping_payment_step_allowed AS skipping_payment_step_allowed_15, t0.account_verification_required AS account_verification_required_16, t0.shipping_address_in_checkout_required AS shipping_address_in_checkout_required_17, t0.default_locale_id AS default_locale_id_18, t19.code AS code_20, t19.created_at AS created_at_21, t19.updated_at AS updated_at_22, t19.id AS id_23, t0.base_currency_id AS base_currency_id_24, t25.code AS code_26, t25.created_at AS created_at_27, t25.updated_at AS updated_at_28, t25.id AS id_29, t0.default_tax_zone_id AS default_tax_zone_id_30, t0.menu_taxon_id AS menu_taxon_id_31, t0.shop_billing_data_id AS shop_billing_data_id_32, t0.channel_price_history_config_id AS channel_price_history_config_id_33 FROM sylius_channel t0 INNER JOIN sylius_locale t19 ON t0.default_locale_id = t19.id INNER JOIN sylius_currency t25 ON t0.base_currency_id = t25.id WHERE t0.code = ? LIMIT 1",
    "params": {
        "1": "WEB-EU"
    },
    "types": {
        "1": 2
    }
}
DEBUG 15:50:46 doctrine Executing statement: SELECT t0.code AS code_1, t0.created_at AS created_at_2, t0.updated_at AS updated_at_3, t0.id AS id_4 FROM sylius_locale t0 INNER JOIN sylius_channel_locales ON t0.id = sylius_channel_locales.locale_id WHERE sylius_channel_locales.channel_id = ? (parameters: {params}, types: {types})
{
    "sql": "SELECT t0.code AS code_1, t0.created_at AS created_at_2, t0.updated_at AS updated_at_3, t0.id AS id_4 FROM sylius_locale t0 INNER JOIN sylius_channel_locales ON t0.id = sylius_channel_locales.locale_id WHERE sylius_channel_locales.channel_id = ?",
    "params": {
        "1": 1
    },
    "types": {
        "1": 1
    }
}
DEBUG 15:50:46 event Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\DebugHandlersListener::configure".
{
    "event": "kernel.request",
    "listener": "Symfony\\Component\\HttpKernel\\EventListener\\DebugHandlersListener::configure"
}
DEBUG 15:50:46 event Notified event "kernel.request" to listener "Sylius\Bundle\ResourceBundle\Storage\CookieStorage::onKernelRequest".
{
    "event": "kernel.request",
    "listener": "Sylius\\Bundle\\ResourceBundle\\Storage\\CookieStorage::onKernelRequest"
}
DEBUG 15:50:46 event Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\ValidateRequestListener::onKernelRequest".
{
    "event": "kernel.request",
    "listener": "Symfony\\Component\\HttpKernel\\EventListener\\ValidateRequestListener::onKernelRequest"
}
DEBUG 15:50:46 event Notified event "kernel.request" to listener "Symfony\Bridge\Doctrine\Middleware\IdleConnection\Listener::onKernelRequest".
{
    "event": "kernel.request",
    "listener": "Symfony\\Bridge\\Doctrine\\Middleware\\IdleConnection\\Listener::onKernelRequest"
}
DEBUG 15:50:46 event Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\SessionListener::onKernelRequest".
{
    "event": "kernel.request",
    "listener": "Symfony\\Component\\HttpKernel\\EventListener\\SessionListener::onKernelRequest"
}
DEBUG 15:50:46 event Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\LocaleListener::setDefaultLocale".
{
    "event": "kernel.request",
    "listener": "Symfony\\Component\\HttpKernel\\EventListener\\LocaleListener::setDefaultLocale"
}
DEBUG 15:50:46 event Notified event "kernel.request" to listener "Sylius\Bundle\ApiBundle\EventSubscriber\KernelRequestEventSubscriber::validateApi".
{
    "event": "kernel.request",
    "listener": "Sylius\\Bundle\\ApiBundle\\EventSubscriber\\KernelRequestEventSubscriber::validateApi"
}
DEBUG 15:50:46 event Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\RouterListener::onKernelRequest".
{
    "event": "kernel.request",
    "listener": "Symfony\\Component\\HttpKernel\\EventListener\\RouterListener::onKernelRequest"
}
DEBUG 15:50:46 event Notified event "kernel.request" to listener "Sylius\Resource\Symfony\EventListener\AddFormatListener::onKernelRequest".
{
    "event": "kernel.request",
    "listener": "Sylius\\Resource\\Symfony\\EventListener\\AddFormatListener::onKernelRequest"
}
DEBUG 15:50:46 event Notified event "kernel.request" to listener "ApiPlatform\Symfony\EventListener\AddFormatListener::onKernelRequest".
{
    "event": "kernel.request",
    "listener": "ApiPlatform\\Symfony\\EventListener\\AddFormatListener::onKernelRequest"
}
DEBUG 15:50:46 event Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\LocaleListener::onKernelRequest".
{
    "event": "kernel.request",
    "listener": "Symfony\\Component\\HttpKernel\\EventListener\\LocaleListener::onKernelRequest"
}
DEBUG 15:50:46 event Notified event "kernel.request" to listener "Sylius\Bundle\ShopBundle\EventListener\NonChannelLocaleListener::restrictRequestLocale".
{
    "event": "kernel.request",
    "listener": "Sylius\\Bundle\\ShopBundle\\EventListener\\NonChannelLocaleListener::restrictRequestLocale"
}
DEBUG 15:50:46 event Notified event "kernel.request" to listener "FOS\RestBundle\EventListener\BodyListener::onKernelRequest".
{
    "event": "kernel.request",
    "listener": "FOS\\RestBundle\\EventListener\\BodyListener::onKernelRequest"
}
DEBUG 15:50:46 event Notified event "kernel.request" to listener "Symfony\Bundle\SecurityBundle\Debug\TraceableFirewallListener::configureLogoutUrlGenerator".
{
    "event": "kernel.request",
    "listener": "Symfony\\Bundle\\SecurityBundle\\Debug\\TraceableFirewallListener::configureLogoutUrlGenerator"
}
DEBUG 15:50:46 event Notified event "kernel.request" to listener "Symfony\Bundle\SecurityBundle\Debug\TraceableFirewallListener::onKernelRequest".
{
    "event": "kernel.request",
    "listener": "Symfony\\Bundle\\SecurityBundle\\Debug\\TraceableFirewallListener::onKernelRequest"
}
DEBUG 15:50:46 event Notified event "kernel.request" to listener "Sylius\Bundle\LocaleBundle\Listener\RequestLocaleSetter::onKernelRequest".
{
    "event": "kernel.request",
    "listener": "Sylius\\Bundle\\LocaleBundle\\Listener\\RequestLocaleSetter::onKernelRequest"
}
DEBUG 15:50:46 event Notified event "kernel.request" to listener "ApiPlatform\Symfony\EventListener\ReadListener::onKernelRequest".
{
    "event": "kernel.request",
    "listener": "ApiPlatform\\Symfony\\EventListener\\ReadListener::onKernelRequest"
}
DEBUG 15:50:46 event Notified event "kernel.request" to listener "Sylius\Bundle\CoreBundle\EventListener\LocaleAwareListener::onKernelRequest".
{
    "event": "kernel.request",
    "listener": "Sylius\\Bundle\\CoreBundle\\EventListener\\LocaleAwareListener::onKernelRequest"
}
DEBUG 15:50:46 event Notified event "kernel.request" to listener "ApiPlatform\Symfony\EventListener\DeserializeListener::onKernelRequest".
{
    "event": "kernel.request",
    "listener": "ApiPlatform\\Symfony\\EventListener\\DeserializeListener::onKernelRequest"
}
DEBUG 15:50:46 event Notified event "kernel.request" to listener "Sylius\Bundle\AdminBundle\EventListener\AdminFilterSubscriber::onKernelRequest".
{
    "event": "kernel.request",
    "listener": "Sylius\\Bundle\\AdminBundle\\EventListener\\AdminFilterSubscriber::onKernelRequest"
}
DEBUG 15:50:46 event Notified event "kernel.request" to listener "Sylius\Bundle\CoreBundle\Checkout\CheckoutResolver::onKernelRequest".
{
    "event": "kernel.request",
    "listener": "Sylius\\Bundle\\CoreBundle\\Checkout\\CheckoutResolver::onKernelRequest"
}
DEBUG 15:50:46 event Notified event "kernel.request" to listener "Symfony\UX\LiveComponent\EventListener\LiveComponentSubscriber::onKernelRequest".
{
    "event": "kernel.request",
    "listener": "Symfony\\UX\\LiveComponent\\EventListener\\LiveComponentSubscriber::onKernelRequest"
}
DEBUG 15:50:46 event Notified event "kernel.controller" to listener "Symfony\UX\LiveComponent\EventListener\LiveComponentSubscriber::onKernelController".
{
    "event": "kernel.controller",
    "listener": "Symfony\\UX\\LiveComponent\\EventListener\\LiveComponentSubscriber::onKernelController"
}
DEBUG 15:50:46 event Notified event "kernel.controller" to listener "Symfony\Bundle\FrameworkBundle\DataCollector\RouterDataCollector::onKernelController".
{
    "event": "kernel.controller",
    "listener": "Symfony\\Bundle\\FrameworkBundle\\DataCollector\\RouterDataCollector::onKernelController"
}
DEBUG 15:50:46 event Notified event "kernel.controller" to listener "Symfony\Component\HttpKernel\DataCollector\RequestDataCollector::onKernelController".
{
    "event": "kernel.controller",
    "listener": "Symfony\\Component\\HttpKernel\\DataCollector\\RequestDataCollector::onKernelController"
}
DEBUG 15:50:46 event Notified event "kernel.controller_arguments" to listener "Symfony\Component\HttpKernel\EventListener\IsSignatureValidAttributeListener::onKernelControllerArguments".
{
    "event": "kernel.controller_arguments",
    "listener": "Symfony\\Component\\HttpKernel\\EventListener\\IsSignatureValidAttributeListener::onKernelControllerArguments"
}
DEBUG 15:50:46 event Notified event "kernel.controller_arguments" to listener "Symfony\Component\Security\Http\EventListener\IsCsrfTokenValidAttributeListener::onKernelControllerArguments".
{
    "event": "kernel.controller_arguments",
    "listener": "Symfony\\Component\\Security\\Http\\EventListener\\IsCsrfTokenValidAttributeListener::onKernelControllerArguments"
}
DEBUG 15:50:46 event Notified event "kernel.controller_arguments" to listener "Symfony\Component\Security\Http\EventListener\IsGrantedAttributeListener::onKernelControllerArguments".
{
    "event": "kernel.controller_arguments",
    "listener": "Symfony\\Component\\Security\\Http\\EventListener\\IsGrantedAttributeListener::onKernelControllerArguments"
}
DEBUG 15:50:46 event Notified event "kernel.controller_arguments" to listener "Symfony\Component\HttpKernel\EventListener\CacheAttributeListener::onKernelControllerArguments".
{
    "event": "kernel.controller_arguments",
    "listener": "Symfony\\Component\\HttpKernel\\EventListener\\CacheAttributeListener::onKernelControllerArguments"
}
DEBUG 15:50:46 event Notified event "kernel.controller_arguments" to listener "ContainerXDQcCfv\RequestPayloadValueResolverGhost01ca9cc::onKernelControllerArguments".
{
    "event": "kernel.controller_arguments",
    "listener": "ContainerXDQcCfv\\RequestPayloadValueResolverGhost01ca9cc::onKernelControllerArguments"
}
DEBUG 15:50:46 event Notified event "kernel.controller_arguments" to listener "Sylius\Bundle\CoreBundle\EventListener\CircularDependencyBreakingErrorListener::onControllerArguments".
{
    "event": "kernel.controller_arguments",
    "listener": "Sylius\\Bundle\\CoreBundle\\EventListener\\CircularDependencyBreakingErrorListener::onControllerArguments"
}

Stack Trace

RuntimeError
Twig\Error\RuntimeError:
Impossible to access an attribute ("onHand") on a bool variable ("") in "@SyliusShop/product/show.html.twig" at line 86.

  at templates/bundles/SyliusShopBundle/product/show.html.twig:86
  at Twig\Extension\CoreExtension::getAttribute()
     (var/cache/dev/twig/6c/6cb763cefb9465fb64875d9d267fd4d7.php:261)
  at __TwigTemplate_fc642c81647696a2c87070c1240c7742->block_content()
     (vendor/twig/twig/src/Template.php:446)
  at Twig\Template->yieldBlock()
     (var/cache/dev/twig/1a/1a7047910571431644acc828754f64d9.php:247)
  at __TwigTemplate_2155ccd76b8c87b2c2957963acf1d48c->block_body()
     (vendor/twig/twig/src/Template.php:446)
  at Twig\Template->yieldBlock()
     (var/cache/dev/twig/1a/1a7047910571431644acc828754f64d9.php:106)
  at __TwigTemplate_2155ccd76b8c87b2c2957963acf1d48c->doDisplay()
     (vendor/twig/twig/src/Template.php:402)
  at Twig\Template->yield()
     (var/cache/dev/twig/6c/6cb763cefb9465fb64875d9d267fd4d7.php:56)
  at __TwigTemplate_fc642c81647696a2c87070c1240c7742->doDisplay()
     (vendor/twig/twig/src/Template.php:402)
  at Twig\Template->yield()
     (vendor/twig/twig/src/Template.php:358)
  at Twig\Template->display()
     (vendor/twig/twig/src/Template.php:373)
  at Twig\Template->render()
     (vendor/twig/twig/src/TemplateWrapper.php:51)
  at Twig\TemplateWrapper->render()
     (vendor/twig/twig/src/Environment.php:333)
  at Twig\Environment->render()
     (vendor/symfony/framework-bundle/Controller/AbstractController.php:467)
  at Symfony\Bundle\FrameworkBundle\Controller\AbstractController->doRenderView()
     (vendor/symfony/framework-bundle/Controller/AbstractController.php:472)
  at Symfony\Bundle\FrameworkBundle\Controller\AbstractController->doRender()
     (vendor/symfony/framework-bundle/Controller/AbstractController.php:284)
  at Symfony\Bundle\FrameworkBundle\Controller\AbstractController->render()
     (src/Controller/ProductController.php:341)
  at App\Controller\ProductController->show()
     (vendor/symfony/http-kernel/HttpKernel.php:183)
  at Symfony\Component\HttpKernel\HttpKernel->handleRaw()
     (vendor/symfony/http-kernel/HttpKernel.php:76)
  at Symfony\Component\HttpKernel\HttpKernel->handle()
     (vendor/symfony/http-kernel/Kernel.php:193)
  at Symfony\Component\HttpKernel\Kernel->handle()
     (vendor/symfony/runtime/Runner/Symfony/HttpKernelRunner.php:35)
  at Symfony\Component\Runtime\Runner\Symfony\HttpKernelRunner->run()
     (vendor/autoload_runtime.php:32)
  at require_once('/home/forges/subdomains/preprod/vendor/autoload_runtime.php')
     (public/index.php:5)