0

CraueFormFlowBundleを使用してマルチステップ フォームを構築しようとしています。ひとまず最初のステップ(利用者情報)に行けるのですが、「次へ」ボタンをクリックするとエラーになります。

最初のステップは User エンティティに基づくフォーム データ型で、2 番目のステップはエンティティ Etablissement (別のエンティティ) に基づく別のフォーム データ型です。

私のエラーメッセージがあります:

フォームのビュー データはクラス AppBundle\Entity\Etablissement のインスタンスであると予想されますが、クラス AppBundle\Entity\User のインスタンスです。このエラーを回避するには、「data_class」オプションを null に設定するか、クラス AppBundle\Entity\User のインスタンスを AppBundle\Entity\Etablissement のインスタンスに変換するビュー トランスフォーマーを追加します。

ファイル構成手順:

namespace AppBundle\Form;

// AppBundle/Form/RegistrationEtablissementFlow.php
use Craue\FormFlowBundle\Form\FormFlow;
use Craue\FormFlowBundle\Form\FormFlowInterface;
use Symfony\Component\Form\FormTypeInterface;

class EnregistrementCompletFlow extends FormFlow {

    /**
     * @var FormTypeInterface
     */
    protected $formType;

    public function setFormType(FormTypeInterface $formType) {
        $this->formType = $formType;
    }

    public function getName() {
        return 'enregistrementComplet';
    }

    protected function loadStepsConfig() {
        return array(
            array(
                    'label' => 'Infos personnelles',
                    'form_type' => 'homes_user_registration', // the user's form registered as sevice
            ),
            array(
                    'label' => 'Infos établissement',
                    'form_type' => 'likabee_form_etablissement', // the etablissement's form registered as sevice
                    //'form_type' => $this->formType,
            ),
            array(
                    'label' => 'confirmation',
            ),
        );
    }
}

私のコントローラーで:

/**
     * @Route("/registration-etablissement", name="registrationEtablissement")
     */
    public function registrtationEtablissementAction()
    {
        $formData = new User();
        $formData->setEtablissement( new Etablissement());

        $flow = $this->get('likabee.form.flow.enregistrementComplet'); // must match the flow's service id
        $flow->bind($formData);

        // form of the current step
        $form = $flow->createForm();
        if ($flow->isValid($form))
        {
            $flow->saveCurrentStepData($form);

            if ($flow->nextStep())
            {

                // form for the next step
                $form = $flow->createForm();
            }
            else
            {
                // flow finished

                $em = $this->getDoctrine()->getManager();
                $em->persist($formData);
                $em->flush();

                $flow->reset(); // remove step data from the session

                return $this->redirect($this->generateUrl('index')); // redirect when done
            }
        }

        return $this->render('registrationEtablissement.html.twig', array(
                'form' => $form->createView(),
                'flow' => $flow,
        ));
    }

2番目のステップに行くとき、フォームはEtablissementタイプではなくユーザータイプを待っていると思いますが、これを解決する方法がわかりません...

前もって感謝します ...

4

1 に答える 1