Forms 更新symfony2表单:选择要显示的字段

Forms 更新symfony2表单:选择要显示的字段,forms,symfony,Forms,Symfony,我希望允许以前注册的候选人返回他的注册并添加(并且仅添加)缺失的文档 这是我的看法 <form action="{{ path('candidat_update', { 'id': entity.id }) }}" method="post" {{ form_enctype(edit_form) }}> {% if ((entity.file2)==0)%} {{ form_row(edit_form.file2

我希望允许以前注册的候选人返回他的注册并添加(并且仅添加)缺失的文档

这是我的看法

<form action="{{ path('candidat_update', { 'id': entity.id }) }}" method="post" {{ form_enctype(edit_form) }}>

    {% if ((entity.file2)==0)%}                       
        {{ form_row(edit_form.file2, { 'label': 'file2' }) }}
    {% endif %}

    <p>
        <button class="btn-small" type="submit">update</button>
    </p>
</form>
其中CandidateType包含最初在创建操作(基于CRUD的控制器)上生成每个字段的生成器

有什么问题吗?
Thanx

在模板中过滤表单字段不是一个好主意。 更好的方法是在构建表单时使用选项。下面是一个关于如何做到这一点的示例

1) 设置向表单中添加字段的条件

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder->add('field_a', 'type');
    // ...
    if ($options['allow_edit_field_b']) {
        $builder->add('field_b', 'text', array(
            'property_path' => false,
        ));
    }
    // ...
2) 定义您的选项

 public function setDefaultOptions(OptionsResolverInterface $resolver) {
    $resolver->setDefaults(array(
        'allow_edit_field_b' => false,
        ));
 }
3) 建立你的形式

    $form = $this->createForm(new YourType(), $yourObject, array(
        'allow_edit_field_b' => true,
    ));

这里的键在
buildForm
类中,您还没有给出该类的所有详细信息。您可以在其中决定允许编辑实体的哪些字段您可能希望更改buildForm方法,使其仅使用相关字段构造表单。thanx,问题是我有4个字段(要上载或不上载的文档),这意味着我有16个可能的组合…我如何才能使用这些字段进行dela?“在模板中筛选表单字段不是一个好主意。”为什么?换句话说,为什么要构建字段来隐藏在模板中,根据您希望用户编辑的内容调整表单不是更好吗?thanx ahmed,这很有用……但是……因为我有4个字段(要上传的文档),这意味着我有16种可能的组合…你将如何处理?如果我设法通过if($editForm->isValid())我需要放在某个地方,那么视图上的选择似乎是一个解决方案:if($entity->getFile1\u bool())allow_edit\u file1'=>true;if($entity->getFile2\u bool())在调用createForm方法之前或调用该方法时,是否允许\u edit\u file2'=>true;等?
 public function setDefaultOptions(OptionsResolverInterface $resolver) {
    $resolver->setDefaults(array(
        'allow_edit_field_b' => false,
        ));
 }
    $form = $this->createForm(new YourType(), $yourObject, array(
        'allow_edit_field_b' => true,
    ));