Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 没有实体的Symfony表单步骤向导_Php_Forms_Symfony - Fatal编程技术网

Php 没有实体的Symfony表单步骤向导

Php 没有实体的Symfony表单步骤向导,php,forms,symfony,Php,Forms,Symfony,所以我现在正在做一个项目,基本上我必须为一个客户注册。客户是个人或组织。如果是组织,客户必须提供公司名称。一旦收集到数据(客户提交了表单并且所有验证都正常),数据将发送到API,API将用户保存在数据库中(实体位于不同的项目中,并且两者共享同一数据库) 因此,注册需要两个步骤,第一步是选择您是个人还是组织,第二步是所有字段(如果您选择了组织,则带有额外字段) 我正在构建的代码尝试在一个表单类型中实现它(这段代码不是我完成的,但是这个想法是我应该完成的) 但问题是,如果我转到我的表单,在第一步按下

所以我现在正在做一个项目,基本上我必须为一个客户注册。客户是个人或组织。如果是组织,客户必须提供公司名称。一旦收集到数据(客户提交了表单并且所有验证都正常),数据将发送到API,API将用户保存在数据库中(实体位于不同的项目中,并且两者共享同一数据库)

因此,注册需要两个步骤,第一步是选择您是个人还是组织,第二步是所有字段(如果您选择了组织,则带有额外字段)

我正在构建的代码尝试在一个表单类型中实现它(这段代码不是我完成的,但是这个想法是我应该完成的)

但问题是,如果我转到我的表单,在第一步按下next按钮,它会在第二步验证字段。如果我在第二步按Signup,它不会验证任何内容,只会将表单视为有效

现在我知道有一个包可以执行stepwizard(CraueFormFlowBundle),但这只在使用我不使用的实体时有效


为什么在第1步中单击“下一步”时会验证第2步?我如何解决我的问题(或者是否有更好的方法来做我想做的事情?

@emix我知道我不应该使用superglobals,我没有改变这一点。至于其他人,我怎么不需要一个倾听者呢?根据步骤,我将如何显示字段/隐藏字段?我将在细枝中进行管理。想举个例子说明一下您是如何做到的吗?我不知道我该怎么做
class SignUpFormType extends AbstractType {
    public function buildForm(FormBuilderInterface $builder, array $options) {
        $builder
            ->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
                $form = $event->getForm();

                if (!empty($_POST)) {
                    $data = $_POST['sign_up_form'];

                    if (isset($data['type'])) {
                        if ($data['type'] === 'company') {
                            $form
                                ->add('vatNr', TextType::class)
                                ->add('companyName', TextType::class);
                        }

                        $form
                            ->add('firstName', TextType::class)
                            ->add('lastName', TextType::class)
                            ->add('email', EmailType::class, [
                                'label' => 'Email:',
                                'label_attr' => ['class' => 'g-color-gray-dark-v2 g-font-weight-600 g-font-size-13'],
                                'required' => true,
                                'constraints' => [
                                    new NotBlank(['message' => 'Please fill in your email.'])
                                ]
                            ])
                            ->add('password', RepeatedType::class, [
                                'type' => PasswordType::class,
                                'invalid_message' => 'The password fields must match.',
                                'options' => ['attr' => ['class' => 'password-field']],
                                'required' => true,
                                'first_options' => [
                                    'label' => 'Password:',
                                    'label_attr' => ['class' => 'g-color-gray-dark-v2 g-font-weight-600 g-font-size-13']
                                ],
                                'second_options' => [
                                    'label' => 'Confirm Password:',
                                    'label_attr' => ['class' => 'g-color-gray-dark-v2 g-font-weight-600 g-font-size-13']
                                ],
                            ])
                            ->add('agree_tos', CheckboxType::class, [
                                'label' => 'I accept the Terms of Services',
                                'label_attr' => ['class' => 'form-check-inline u-check g-color-gray-dark-v2 g-font-weight-600 g-font-size-13'],
                                'attr' => ['class' => 'g-hidden-xs-up'],
                                'constraints' => [
                                    new IsTrue(['message' => 'You have to agree to our Terms of Services'])
                                ]
                            ])
                            ->add('Signup', SubmitType::class, ['attr' => ['class' => 'btn btn-md u-btn-primary rounded g-py-13 g-px-25']]);
                    }
                } else {
                    $form
                        ->add('type', ChoiceType::class, [
                            'multiple' => false,
                            'choices' => [
                                'company' => 'company',
                                'person' => 'person'
                            ]
                        ])
                        ->add('next', SubmitType::class, ['attr' => ['class' => 'btn btn-md u-btn-primary rounded g-py-13 g-px-25']]);
                }
            });
    }

    public function configureOptions(OptionsResolver $resolver) {
        $resolver->setDefault('allow_extra_fields', true);
    }
}