我怎么能不在 symfony 中显示我的表单的一部分?
how can I not display a part of my form in 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);
}
我想你可以循环将你的表单字段扔到树枝中来显示它们,但我现在还没有想到那部分,正在研究它
我必须显示或不显示表单的一部分,具体取决于变量在我的数据库中采用的值。
这是我的表格:
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);
}
我想你可以循环将你的表单字段扔到树枝中来显示它们,但我现在还没有想到那部分,正在研究它