我有一个带有字段的表单,只有在前一个单选按钮被选为" 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?我该如何解决,或使其有效?