как я не могу отобразить часть моей формы в symfony? - PullRequest
0 голосов
/ 27 февраля 2020

Я должен показать или нет часть моей формы в зависимости от значения, которое переменная принимает в моей базе данных.

Вот моя форма:

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('assetClass',ChoiceType::class, array(
                        'placeholder' => 'Select asset class',
                        'choices'  => array(
                            'a' => '1',
                            'b' => '2',
                            'c' => '3'
                        )))
                ->add('code')
                ->add('name')
                ->add('note',TextareaType::class,array('required' => false))
                ->add('route', HiddenType::class);
    }

Мне нужно показать или нет ChoiceType.

Есть идеи сделать это?

Ответы [ 2 ]

2 голосов
/ 27 февраля 2020

В ветке:

{{ form_start(form, {'method': 'POST'}) }}
    {% if condition %}
        {{ form_widget(form.assetClass) }}
    {% endif %}
    {{ form_widget(form.code) }}
    {{ form_widget(form.name) }}
    {{ form_widget(form.note) }}
    {{ form_widget(form.route) }}
    {{ form_widget(form._token) }}
{{ form_end(form, {'render_rest': false}) }}

С {'render_rest': false} вы не визуализируете остальную часть своей формы. Если вы это сделаете, не забудьте отрисовать токен CSRF. Дайте нам знать.

1 голос
/ 28 февраля 2020

Вы можете использовать форму событий, я чувствую, что эта страница может вам помочь: https://symfony.com/doc/4.4/form/dynamic_form_modification.html

Что-то в этом роде:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
        $test = $event->getData();
        $form = $event->getForm();

        if (your condition) {
            $form->add('assetClass',ChoiceType::class, array(
                    'placeholder' => 'Select asset class',
                    'choices'  => array(
                        'a' => '1',
                        'b' => '2',
                        'c' => '3'
                    )))
        }
    }

    $builder
            ->add('code')
            ->add('name')
            ->add('note',TextareaType::class,array('required' => false))
            ->add('route', HiddenType::class);
}

Я думаю, вы может тогда l oop бросил поля формы в веточку, чтобы отобразить их, но я пока не рассчитывал эту часть, работая над ней

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...