我想根据单选按钮状态设置我的表单,但无论使用什么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')))
;
是否可以根据单选按钮以及单选按钮组下的显示方式更新表格?
致问候,
如果有人找到这篇文章,你会发现我是如何解决我的问题的:
1:你必须创建一个新的特定表单(在此之前,我所有的表单都只显示在一个树枝上…(
2:每行显示表单行,然后将封装的对象(新的ObjectType(((放在特定的div中。然后添加另一个特定的div来显示字段"entity"(
3:根据单选按钮插入用于显示/隐藏指定div的javascript
4:调整控制器。
我认为这不是最好的方法。但是我在网上没有找到好的东西,如果你找到更好的方法,不要犹豫回答或联系我
致问候,
我以类似于您尝试过的方式修改了表单。我的代码有一些不同:
$builder->addEventListener(
FormEvents::PRE_SET_DATA,
function(FormEvent $event) {
$form = $event->getForm();
$data = $event->getData();
if($data->getName() != NULL){
$form->add('surname');
}
}
);
这对我有效。
如果你想在单选按钮下显示这个字段(在我的情况下是在"名称"字段下(,你可以在你的表单中这样做:
$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');
}
}
);
最后一个例子没有经过测试,但我认为它应该有效。
我希望这对你有用。
致以亲切的问候。