根据变量在数据库中的取值,我必须显示或不显示表单的一部分。
这是我的表格:
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);
}
我想你可以把你的表单字段循环到树枝上显示它们,但我现在还没有想到这一部分,正在进行