Forms 如果自定义条件匹配,则从实体表单字段中删除实体
我有一个unsubscribe表单,其中第一个字段是实体字段,获取我的UnsubscribeType实体: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',
$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方法,但不知道这是否合适