Reputation: 182
I have to show or not a part of my form depending on the value that a variable assumes in my database.
Here is my form:
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);
}
I need to show or not the ChoiceType.
Any idea for doing that?
Upvotes: 0
Views: 78
Reputation: 11
You can use the form events, i feel like this page can help you : https://symfony.com/doc/4.4/form/dynamic_form_modification.html
Something like that:
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);
}
I guess you can then loop threw your form fields in twig to display them but i haven't figured that part for now, working on it
Upvotes: 1
Reputation: 336
In twig :
{{ 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}) }}
With {'render_rest': false}
, you don't render the rest of your form.
If you do that, dont forget to render the CSRF token.
Let us know.
Upvotes: 2