我有一个取消订阅表单,其中第一个字段是实体字段,获取我的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。如果关于authed用户的自定义测试失败,我想从select字段中删除实体#2。
假设我要测试$this->getUser()->getCustomField()
。如果是false
,那么我想从包含我的UnsubscribeType实体的选择字段中删除实体#2。
知道怎么做吗?
答案 0 :(得分:0)
也许您可以从控制器向表单构建器传递测试结果,然后使用'property' => 'name'
或'choices => // fetch entity #1 here
。
所以,像这样
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方法,但不知道是否适合。