Exceptions
Exception
Twig\Error\ RuntimeError
Show exception properties
Twig\Error\RuntimeError {#17695 -lineno: 86 -rawMessage: "Impossible to access an attribute ("onHand") on a bool variable ("")." -source: Twig\Source {#12527 -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 }
<div class="product-reference" style="margin-top: -10px; margin-bottom: 10px; font-size: 0.9rem; color: #777; font-family: monospace; letter-spacing: 0.5px;">Ref : <span data-product-variant-target="code">{{ product.variants.first.code|default(product.code) }}</span></div><div class="stock-status">{% if product.variants.first.onHand > 0 %}CE PRODUIT EST EN STOCK{% else %}RUPTURE DE STOCK{% endif %}</div>
in
var/cache/dev/twig/6c/6cb763cefb9465fb64875d9d267fd4d7.php
::
getAttribute
(line 261)
\t\t\t\t</div>\t\t\t\t<div class=\"stock-status\">\t\t\t\t\t";// line 86if ((CoreExtension::getAttribute($this->env, $this->source, CoreExtension::getAttribute($this->env, $this->source, CoreExtension::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", false, false, false, 86), "first", [], "any", false, false, false, 86), "onHand", [], "any", false, false, false, 86) > 0)) {// line 87yield "\t\t\t\t\t\tCE PRODUIT EST EN STOCK\t\t\t\t\t";} else {// line 89
in
vendor/twig/twig/src/Template.php
->
block_content
(line 446)
throw new \LogicException('A block must be a method on a \Twig\Template instance.');}if (null !== $template) {try {yield from $template->$block($context, $blocks);} catch (Error $e) {if (!$e->getSourceContext()) {$e->setSourceContext($template->getSourceContext());}
in
var/cache/dev/twig/1a/1a7047910571431644acc828754f64d9.php
->
yieldBlock
(line 247)
// line 38yield "\t\t\t\t";// line 40yield from $this->unwrap()->yieldBlock('content', $context, $blocks);// line 41yield "\t\t\t\t";// line 43
in
vendor/twig/twig/src/Template.php
->
block_body
(line 446)
throw new \LogicException('A block must be a method on a \Twig\Template instance.');}if (null !== $template) {try {yield from $template->$block($context, $blocks);} catch (Error $e) {if (!$e->getSourceContext()) {$e->setSourceContext($template->getSourceContext());}
in
var/cache/dev/twig/1a/1a7047910571431644acc828754f64d9.php
->
yieldBlock
(line 106)
yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("sylius_shop_cart_summary");yield "\">\t\t";// line 30yield from $this->unwrap()->yieldBlock('body', $context, $blocks);// line 50yield "\t\t";// line 51yield from $this->unwrap()->yieldBlock('javascripts', $context, $blocks);
in
vendor/twig/twig/src/Template.php
->
doDisplay
(line 402)
{$context += $this->env->getGlobals();$blocks = array_merge($this->blocks, $blocks);try {yield from $this->doDisplay($context, $blocks);} catch (Error $e) {if (!$e->getSourceContext()) {$e->setSourceContext($this->getSourceContext());}
in
var/cache/dev/twig/6c/6cb763cefb9465fb64875d9d267fd4d7.php
->
yield
(line 56)
$__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];$__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "template", "@SyliusShop/product/show.html.twig"));$this->parent = $this->load("@SyliusShop/shared/layout/base.html.twig", 1);yield from $this->parent->unwrap()->yield($context, array_merge($this->blocks, $blocks));$__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);$__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
in
vendor/twig/twig/src/Template.php
->
doDisplay
(line 402)
{$context += $this->env->getGlobals();$blocks = array_merge($this->blocks, $blocks);try {yield from $this->doDisplay($context, $blocks);} catch (Error $e) {if (!$e->getSourceContext()) {$e->setSourceContext($this->getSourceContext());}
in
vendor/twig/twig/src/Template.php
->
yield
(line 358)
return $this->blocks;}public function display(array $context, array $blocks = []): void{foreach ($this->yield($context, $blocks) as $data) {echo $data;}}public function render(array $context): string
in
vendor/twig/twig/src/Template.php
->
display
(line 373)
ob_start();} else {ob_start(function () { return ''; });}try {$this->display($context);} catch (\Throwable $e) {while (ob_get_level() > $level) {ob_end_clean();}
in
vendor/twig/twig/src/TemplateWrapper.php
->
render
(line 51)
yield from $this->template->yieldBlock($name, $context);}public function render(array $context = []): string{return $this->template->render($context);}/*** @return void*/
in
vendor/twig/twig/src/Environment.php
->
render
(line 333)
* @throws SyntaxError When an error occurred during compilation* @throws RuntimeError When an error occurred during rendering*/public function render($name, array $context = []): string{return $this->load($name)->render($context);}/*** Displays a template.*
in
vendor/symfony/framework-bundle/Controller/AbstractController.php
->
render
(line 467)
if (null !== $block) {return $this->container->get('twig')->load($view)->renderBlock($block, $parameters);}return $this->container->get('twig')->render($view, $parameters);}private function doRender(string $view, ?string $block, array $parameters, ?Response $response, string $method): Response{$content = $this->doRenderView($view, $block, $parameters, $method);
in
vendor/symfony/framework-bundle/Controller/AbstractController.php
->
doRenderView
(line 472)
return $this->container->get('twig')->render($view, $parameters);}private function doRender(string $view, ?string $block, array $parameters, ?Response $response, string $method): Response{$content = $this->doRenderView($view, $block, $parameters, $method);$response ??= new Response();if (200 === $response->getStatusCode()) {foreach ($parameters as $v) {if ($v instanceof FormInterface && $v->isSubmitted() && !$v->isValid()) {
in
vendor/symfony/framework-bundle/Controller/AbstractController.php
->
doRender
(line 284)
* If an invalid form is found in the list of parameters, a 422 status code is returned.* Forms found in parameters are auto-cast to form views.*/protected function render(string $view, array $parameters = [], ?Response $response = null): Response{return $this->doRender($view, null, $parameters, $response, __FUNCTION__);}/*** Renders a block in a view.*
$form = $this->formFactory->createNamed('sylius_add_to_cart', AddToCartType::class, $addToCartCommand, ['product' => $product]);// Fetch iconic products$iconicProducts = $this->findFlaggedProducts($this->productRepository, 'isIconic', $channel);return $this->render('@SyliusShop/product/show.html.twig', ['product' => $product,'form' => $form->createView(),'iconic_products' => $iconicProducts,]);}
in
vendor/symfony/http-kernel/HttpKernel.php
->
show
(line 183)
$this->dispatcher->dispatch($event, KernelEvents::CONTROLLER_ARGUMENTS);$controller = $event->getController();$arguments = $event->getArguments();// call controller$response = $controller(...$arguments);// viewif (!$response instanceof Response) {$event = new ViewEvent($this, $request, $type, $response, $event);$this->dispatcher->dispatch($event, KernelEvents::VIEW);
in
vendor/symfony/http-kernel/HttpKernel.php
->
handleRaw
(line 76)
$request->headers->set('X-Php-Ob-Level', (string) ob_get_level());$this->requestStack->push($request);$response = null;try {return $response = $this->handleRaw($request, $type);} catch (\Throwable $e) {if ($e instanceof \Error && !$this->handleAllThrowables) {throw $e;}
in
vendor/symfony/http-kernel/Kernel.php
->
handle
(line 193)
if (!$this->handlingHttpCache) {$this->resetServices = true;}try {return $this->getHttpKernel()->handle($request, $type, $catch);} finally {--$this->requestStackSize;}}
in
vendor/symfony/runtime/Runner/Symfony/HttpKernelRunner.php
->
handle
(line 35)
) {}public function run(): int{$response = $this->kernel->handle($this->request);if (Kernel::VERSION_ID >= 60400) {$response->send(false);if (\function_exists('fastcgi_finish_request') && !$this->debug) {
in
vendor/autoload_runtime.php
->
run
(line 32)
$app = $app(...$args);exit($runtime->getRunner($app)->run());
require_once('/home/forges/subdomains/preprod/vendor/autoload_runtime.php')
in
public/index.php
(line 5)
<?phpuse App\Kernel;require_once dirname(__DIR__).'/vendor/autoload_runtime.php';return function (array $context) {return new Kernel($context['APP_ENV'], (bool) $context['APP_DEBUG']);};
Logs
| Level | Channel | Message |
|---|---|---|
| INFO 15:34:07 | 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:34:07 | 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:34:07 | 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:34:07 | 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:34:07 | request |
Matched route "_profiler". {
"route": "_profiler",
"route_parameters": {
"_route": "_profiler",
"_controller": "web_profiler.controller.profiler::panelAction",
"token": "6009d8"
},
"request_uri": "https://forges-preprod.kwantic.dev/_profiler/6009d8",
"method": "GET"
}
|
| DEBUG 15:34:07 | security |
Checking for authenticator support. {
"firewall_name": "shop",
"authenticators": 3
}
|
| DEBUG 15:34:07 | security |
Checking support on authenticator. {
"firewall_name": "shop",
"authenticator": "Symfony\\Component\\Security\\Http\\Authenticator\\Debug\\TraceableAuthenticator"
}
|
| DEBUG 15:34:07 | security |
Authenticator does not support the request. {
"firewall_name": "shop",
"authenticator": "Symfony\\Component\\Security\\Http\\Authenticator\\Debug\\TraceableAuthenticator"
}
|
| DEBUG 15:34:07 | security |
Checking support on authenticator. {
"firewall_name": "shop",
"authenticator": "Symfony\\Component\\Security\\Http\\Authenticator\\Debug\\TraceableAuthenticator"
}
|
| DEBUG 15:34:07 | security |
Authenticator does not support the request. {
"firewall_name": "shop",
"authenticator": "Symfony\\Component\\Security\\Http\\Authenticator\\Debug\\TraceableAuthenticator"
}
|
| DEBUG 15:34:07 | security |
Checking support on authenticator. {
"firewall_name": "shop",
"authenticator": "Symfony\\Component\\Security\\Http\\Authenticator\\Debug\\TraceableAuthenticator"
}
|
| DEBUG 15:34:07 | security |
Authenticator does not support the request. {
"firewall_name": "shop",
"authenticator": "Symfony\\Component\\Security\\Http\\Authenticator\\Debug\\TraceableAuthenticator"
}
|
| DEBUG 15:34:07 | 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:34:07 | 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:34:07 | 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:34:07 | 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:34:07 | 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:34:07 | 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:34:07 | 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:34:07 | 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:34:07 | 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:34:07 | 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:34:07 | 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:34:07 | 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:34:07 | event |
Notified event "kernel.request" to listener "ApiPlatform\Symfony\EventListener\AddFormatListener::onKernelRequest". {
"event": "kernel.request",
"listener": "ApiPlatform\\Symfony\\EventListener\\AddFormatListener::onKernelRequest"
}
|
| DEBUG 15:34:07 | 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:34:07 | 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:34:07 | event |
Notified event "kernel.request" to listener "FOS\RestBundle\EventListener\BodyListener::onKernelRequest". {
"event": "kernel.request",
"listener": "FOS\\RestBundle\\EventListener\\BodyListener::onKernelRequest"
}
|
| DEBUG 15:34:07 | 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:34:07 | 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:34:07 | 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:34:07 | event |
Notified event "kernel.request" to listener "ApiPlatform\Symfony\EventListener\ReadListener::onKernelRequest". {
"event": "kernel.request",
"listener": "ApiPlatform\\Symfony\\EventListener\\ReadListener::onKernelRequest"
}
|
| DEBUG 15:34:07 | 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:34:07 | event |
Notified event "kernel.request" to listener "ApiPlatform\Symfony\EventListener\DeserializeListener::onKernelRequest". {
"event": "kernel.request",
"listener": "ApiPlatform\\Symfony\\EventListener\\DeserializeListener::onKernelRequest"
}
|
| DEBUG 15:34:07 | 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:34:07 | 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:34:07 | 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:34:07 | 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:34:07 | 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:34:07 | 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:34:07 | 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:34:07 | 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:34:07 | 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:34:07 | 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:34:07 | event |
Notified event "kernel.controller_arguments" to listener "ContainerXDQcCfv\RequestPayloadValueResolverGhost01ca9cc::onKernelControllerArguments". {
"event": "kernel.controller_arguments",
"listener": "ContainerXDQcCfv\\RequestPayloadValueResolverGhost01ca9cc::onKernelControllerArguments"
}
|
| DEBUG 15:34:07 | 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)
|