Forms 如果自定义条件匹配,则从实体表单字段中删除实体

Forms 如果自定义条件匹配,则从实体表单字段中删除实体,forms,symfony,entity,Forms,Symfony,Entity,我有一个unsubscribe表单,其中第一个字段是实体字段,获取我的UnsubscribeType实体: $builder ->add('type', 'entity', array( 'class' => 'Evo\SubscriptionBundle\Entity\UnsubscribeType', 'property' => 'name', 'label' => 'Choose process type',

我有一个unsubscribe表单,其中第一个字段是实体字段,获取我的UnsubscribeType实体:

$builder
    ->add('type', 'entity', array(
        'class' => 'Evo\SubscriptionBundle\Entity\UnsubscribeType',
        'property' => 'name',
        'label' => 'Choose process type',
        'empty_value'   => 'Choose an option',
        'empty_data' => null,
        'label_attr' => array(
            'class' => 'control-label',
        ),
        'attr' => array(
            'class' => 'form-control',
        ),
    ))
此集合包含2个实体,1和2。如果有关授权用户的自定义测试失败,我想从选择字段中删除实体2

假设我要测试$this->getUser->getCustomField。如果为false,则我希望从包含我的UnsubscribeType实体的select字段中删除实体2


知道怎么做吗?

也许您可以将控制器的测试结果传递给表单生成器,然后使用“property”=>“name”或“choices=>//在此处提取实体1

像这样的

public function buildForm(FormBuilderInterface $builder, array $options)
{
    if($options['customField'] === TRUE)
    {
        $builder
            ->add('type', 'entity', array(
               'class' => 'Evo\SubscriptionBundle\Entity\UnsubscribeType',
               'property' => 'name',
               // ..
        ;
    }
    else
    {
        $builder
            ->add('type', 'entity', array(
               'class' => 'Evo\SubscriptionBundle\Entity\UnsubscribeType',
               'choices' => $options['customField'],
               // ..
        ;
    }
}

/**
 * @param OptionsResolverInterface $resolver
 */
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    // ..

    $resolver->setRequired(array(
        'customField'
    ));
}
在控制器中:

$form = $this->get('form.factory')->create(new EntryType(), $entry, array(
        'customField' => $this->getUser()->getCustomField()
));
getCustomField返回true或要填充选择字段的实体或实体集合。我的解决方案涉及更改getCustomField方法,但不知道这是否合适