Symfony форма пошагового мастера без сущности - PullRequest
0 голосов
/ 19 марта 2020

Итак, я сейчас работаю над проектом, и в основном я должен подписаться на клиента. Клиент - это либо человек, либо организация. Если это организация, клиент должен указать название компании. Как только данные собраны (клиент отправил форму и все проверки правильны), данные отправляются в API, который сохраняет пользователя в базе данных (объекты находятся в другом проекте и оба совместно используют одну и ту же базу данных)

Итак, регистрация требует 2 шага, первый шаг - выбрать, являетесь ли вы человеком или организацией, а второй шаг - это все поля (с дополнительными полями, если вы выбрали организацию)

код, который я строю на попытках сделать это в одном FormType (этот код не сделан мной, но идея - то, что я бы сделал)

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);
    }
}

Проблема, однако, в том, что если я go к моей форме, и я нажимаю следующую кнопку на первом шаге, она проверяет поля на втором шаге. Если я нажимаю на втором шаге «Регистрация», он ничего не проверяет и просто видит форму как правильную.

Теперь я знаю, что есть пакет для выполнения пошагового мастера (CraueFormFlowBundle), но это работает только при использовании объектов, которые Я не использую.

Почему он проверяет шаг 2 при нажатии кнопки «Далее» на шаге 1 и как я могу исправить свою проблему (или есть лучший способ сделать то, что я хочу?)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...