我想根据单选按钮状态设置我的表单,但无论使用什么formEvents ...值都没有改变,所以我无法删除或添加字段......
Atm,我有这个:
$builder->addEventListener(
FormEvents::PRE_SET_DATA,
function(FormEvent $event) use ($factory){
$data = $event->getData();
echo 'value :' .$data->radioAvatar;
if ($data->radioAvatar){
$form = $event->getForm();
$form->add('avatar');
}
} );
无论什么无线电有效,我都不会看到新字段(radioAvatar的默认值为0)。因此,如果默认值为1,则字段将显示在我的提交按钮...
下我的forminput:
$builder
->add('name', 'text',array(
'label' =>'Public name'))
->add('radioAvatar', 'choice', array(
'label' => 'Had you already sent a picture',
'choices' => array(
0 => 'no',
1 => 'yes'),
'multiple' => false,
'expanded' => true))
->add('save', 'submit',array(
'label'=> 'Update my profil',
'attr' => array('class' => 'btn btn-primary elemtopmarg')))
;
是否可以根据单选按钮更新表单以及单选按钮组下的显示方式?
致以最诚挚的问候,
答案 0 :(得分:1)
如果有人发现这篇文章,你会发现我是如何解决我的问题的:
1:您必须创建一个新的特定表单(在此之前我的所有表单只显示在一个树枝中......)
2:每行显示表单行,然后将封装对象(新的ObjectType())放在特定的div中。然后添加另一个特定的div来显示字段' entity')
3:根据单选按钮
插入用于显示/隐藏指定div的javascript4:调整你的控制器。
我认为这不是最好的方法。但是如果你找到一个更好的方式来回答或联系我,我在互联网上找不到好东西。 :)
致以最诚挚的问候,
答案 1 :(得分:0)
我以与您尝试过的方式类似的方式修改了表单。我的代码有一些不同之处:
$builder->addEventListener(
FormEvents::PRE_SET_DATA,
function(FormEvent $event) {
$form = $event->getForm();
$data = $event->getData();
if($data->getName() != NULL){
$form->add('surname');
}
}
);
这对我有用。
如果您想在单选按钮下显示此字段(在我的情况下在'name'字段下),您可以在表单中执行此操作:
$builder
->add('name')
->add('surname', 'hidden');
稍后在听众中,您可以更改字段的类型:
$builder->addEventListener(
FormEvents::PRE_SET_DATA,
function(FormEvent $event) {
$form = $event->getForm();
$data = $event->getData();
if($data->getName() != NULL){
$field = $builder->get('surname');
$field->setType('text');
}
}
);
最后一个例子没有经过测试,但我认为它应该可行。
我希望这对你有用。
亲切的问候。