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
Auteur
Réponse acceptée

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.