我怎么能不在symfony中显示我表单的一部分呢



根据变量在数据库中的取值,我必须显示或不显示表单的一部分。

这是我的表格:

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。

有什么想法吗?

在树枝中:

{{ 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令牌。让我们知道。

您可以使用表单事件,我觉得这个页面可以帮助您: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);
}

我想你可以把你的表单字段循环到树枝上显示它们,但我现在还没有想到这一部分,正在进行

最新更新