单选按钮上的表单订阅者接收奇怪的值

时间:2016-08-19 11:11:02

标签: forms symfony radio-button listener

我有一个带有字段的表单,只有在前一个单选按钮被选为" Oui"时才会出现。 为此,我使用附加到无线电领域的表单订阅者。

表格类型:

class RegistrationStep3UserDataType extends AbstractType
{
    /**
     * @var EntityManagerInterface
     */
    private $em;

    /**
     * RegistrationUserDataType constructor.
     * @param EntityManagerInterface $em
     */
    public function __construct(EntityManagerInterface $em)
    {
        $this->em = $em;
    }

    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $transformer = new ActivityNameTransformer($this->em);

        $builder
            ->add('activitiesNumber', 'choice', [
                'label' => 'Souhaitez-vous exercer une seconde activité ?',
                'expanded' => false,
                'choices' => array(
                    2 => 'Oui',
                    1 => 'Non',
                ),
                'label_attr' => [
                    'class' => 'radio-inline'
                ],
            ])
        ;

        $builder->get("activitiesNumber")->addEventSubscriber(new AddSecondaryActivityFieldsSubscriber());
    }
}

订阅者:

class AddSecondaryActivityFieldsSubscriber  implements EventSubscriberInterface
{
    /**
     * @return array
     */
    public static function getSubscribedEvents()
    {
        return array(
            FormEvents::POST_SET_DATA => 'postSetData',
            FormEvents::POST_SUBMIT => 'postSubmit',
        );
    }

    /**
     * @param FormEvent $event
     */
    public function postSetData(FormEvent $event)
    {
        $activitiesNumber = $event->getData();
        $form = $event->getForm()->getParent();

        if (2 == $activitiesNumber) {
            $this->addSecondaryActivityField($form);
        }
    }

    /**
     * @param FormEvent $event
     */
    public function postSubmit(FormEvent $event)
    {
        $activitiesNumber = $event->getData();
        $form = $event->getForm()->getParent();

        echo '<pre>';
        \Doctrine\Common\Util\Debug::dump($activitiesNumber);
        echo '</pre>';

        if (2 == $activitiesNumber) {
            $this->addSecondaryActivityField($form);
        }
    }

    /**
     * @param FormInterface $form
     */
    public function addSecondaryActivityField(FormInterface $form)
    {
        $form
            ->add('secondaryActivity', 'text', [
                'label' => 'Activité secondaire souhaitée',
                'attr' => [
                    'required' => true,
                ],
            ]);
    }
}

在postSubmit方法中,我转储$ activitiesNumber而不是接收整数值(1或2),我收到以下数组:

array(2) {
  [0]=>
  bool(true)
  [1]=>
  bool(false)
}

这只是一个去索引的无线电阵列,我无法知道哪一个被检查过。

但如果我将activitiesNumber字段更改为选择框(&#34;展开&#34; =&gt; false),我会收到一个整数值(所选选项的值)。

我可以通过使用选择而不是单选按钮来解决问题,但我真的需要此功能的单选按钮。谁知道这个bug?我该如何解决,或使其有效?

0 个答案:

没有答案