Symfony动态窗体单选按钮



我想根据单选按钮状态设置我的表单,但无论使用什么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');
            }
        }
    );

最后一个例子没有经过测试,但我认为它应该有效。

我希望这对你有用。

致以亲切的问候。

最新更新