Accès à des attributs d'un objet fils dans Twig

Par dubitoph, il y a 7 ans


Bonjour,

J'utilise CraueFormFlowBundle pour la création d'un formulaire en plusieurs étapes. J'en ai deux. Donc, dans mon template, j'ai ceci :

{% extends "base.html.twig" %} {% form_theme form 'bootstrap_4_layout.html.twig' %} {% block stylesheets %} {{ parent () }} <link rel = "stylesheet" href = "//cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.6.0/css/bootstrap-datepicker.css"> {% endblock %} {% block body %} <h1>Création de votre annonce</h1> {{ form_start(form) }} {{ form_errors(form) }} {% if flow.getCurrentStepNumber() == 1 %} ... Mise en forme de mes différents champs lors de la première étape {% endif %} {% if flow.getCurrentStepNumber() == 2 %} <div> <h4>Prix</h4> {{ form_rest(form) }} </div> {% endif %}

De cette manière, tout fonctionne correctement.

Par contre, si je remplace

{{ form_rest(form) }}

pour mettre en forme les différents champs lors de l'étape 2, de cette manière par exemple,

{% if flow.getCurrentStepNumber() == 2 %} <div> <h4>Prix</h4> {% set i = 0 %} {% for price in form.prices %} {{ form_label(form.price.price, 'Prix', {'label_attr': {'class': 'foo'}}) }} {{ form_errors(form.price.price) }} {{ form_widget(form.price.price) }} {{ form_label(form.price.duration, 'Durée', {'label_attr': {'class': 'foo'}}) }} {{ form_errors(form.price.duration) }} {{ form_widget(form.price.duration, { ‘disabled’:’disabled’ }) }} {{ form_label(form.price.season, 'Saison', {'label_attr': {'class': 'foo'}}) }} {{ form_errors(form.price.season) }} {{ form_widget(form.price.season, { ‘disabled’:’disabled’ }) }} <button type="button" id="prices_advert_prices_{{ i }}" class="btn-remove"> Supprimer cette durée </button> {% set i = i + 1 %} {% endfor %} </div> {% endif %}

alors je reçois l'erreur suivante :

"Neither the property "price" nor one of the methods "price()", "getprice()"/"isprice()"/"hasprice()" or "__call()" exist and have public access in class "Symfony\Component\Form\FormView"."

Apparemment, l'erreur provient du fait que Twig ne parvient pas à accéder aux attributs d'objets (price) faisant partie d'une collection (prices) appartenant à l'objet principal (advert) sur lequel repose le formulaire.

Quelqu'un aurait une idée sur la manière dont il faut procéder pour mettre en forme ces champs?

Merci d'avance pour votre aide.

1 réponse

dubitoph, il y a 7 ans

J'ai trouvé mon erreur : au lieu de

{{ form_errors(form.price.price) }}

je devais faire

{{ form_errors(price.price) }}

étant donné que c'est dans ma boucle.