如果从 ChoiceType 中选择了特定值,则添加字段

Add field if certain value is selected from ChoiceType

在我从 ChoiceType 中选择一个值后,我正在尝试向我的表单添加一个新的 TextType 字段。我不知道该怎么办。我尝试了一下,但没有按我想要的方式工作。

抛出的异常是:

Typed property App\Model\Software::$productType must not be accessed before initialization

final class ProductType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options): void
    {
        $builder
            ->add('productType', ChoiceType::class, [
                'choices' => [
                    'Software' => 'software',
                    'Television' => 'television',
                    'Giftcard' => 'giftcard',
                    'Bitte wählen' => '',
                ],
            ])
            ->add('productNumber', TextType::class)
            ->add('title', TextType::class)
            ->add('submit', SubmitType::class);

        $builder->addEventListener(
            FormEvents::POST_SET_DATA,
            function (FormEvent $event)
            {
                $form = $event->getForm();
                $data = $event->getData();

                if ($data->productType === 'giftcard') {
                    $form->add('value', TextType::class);
                }
            }
        );
    }
}

我已经用不同的 FormEvents 试过了。

您遇到的错误“键入 属性 App\Model\Software::$productType 在初始化之前不得访问”是因为在您的实体 'App\Model\Software' 中,属性 'productType'具有“字符串”类型或其他类型,但未初始化为 null 或空字符串或...,并且在您的侦听器中您正在尝试访问该属性 ($data->productType)

尝试将您的属性初始化为 null 或空字符串