Bonjour à vous, je viens vous voir car je suis actuellement en train de me former à Symfony 2, et donc je suis le cours d'Open Class Room pour faciliter mon apprentissage que j'exercèce sur mon temps libre.

Et je suis confronté à un soucis, à un moment du cours on nous explique comment supprimer un élément dans un formulaire. Hors quand on customise un peu la présentation du formulaire, ceci devient impossible et nous retourne une belle erreur :

Method "createdAt" for object "Symfony\Component\Form\FormView" 
does not exist in OCPlatformBundle:Advert:form.html.twig at line 30

Ce qui correspond à :

{% if form.createdAt is not empty %}
    <div class="form-group">
        {{ form_label(form.createdAt, 'Date de publication', {'label_attr': {'class': 'col-sm-3 control-label'}}) }}
        {{ form_errors(form.title) }}
        <div class="col-sm-4">
            {{ form_widget(form.createdAt, {'attr': {'class': 'form-control'}}) }}
        </div>
    </div>
    {% endif %}

Ce code marche pour la partie création, et j'utilise le même fichier de formulaire (twig) pour la création et l'édition. La seule chose qui change c'est que je n'appele pas le même formulaire, voici mon formulaire pour la création, et mon formulaire pour l'édition :

#AdvertType
public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('title', 'text')
            ->add('author', 'text')
            ->add('content', 'textarea')
            ->add('createdAt', 'date', ['widget' => 'single_text', 'format' => 'dd/MM/yy'])
            ->add('image', new ImageType()
            ->add('categories', 'entity', [
                'class'         =>  'OCPlatformBundle:Category',
                'property'      =>  'name',
                'multiple'      =>  true,
                'expanded'      =>  false
            ])
            ->add('save', 'submit', ['label' => 'Soumettre le formulaire'])
        ;
        }
#AdvertEditType
public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->remove('createdAt');
    }

Ma question est donc : comment faire en sorte que la partie createdAt (le formulaire) ne soit pas pris en compte dans la vue si on l'a supprimée du constructeur de formulaire ?

Merci à vous d'avance, je vous avouerais que je patoge un peu depuis hier soir :/

2 réponses


SimonAndGarfunkel
Réponse acceptée

Salut SquallX, je pense qu'il faudrait que tu remplaces:

{% if form.createdAt is not empty %} ... {% endif %}

par

{% if form.createdAt is defined %} ... {% endif %}

C'est exact je te remercie, j'ai parcouru la doc de twig mais j'ai du zappé cet élément.