2017-08-01 18 views
0
私はsymfonyの2.8とFOSUserBundleで作業

、私は、データベース内の同じテーブル内のユーザーの2種類があり、私はこのような登録の同じページに登録フォームをdifferenciateしたい: img *トウ登録フォームFosUserBundle symfonyの

同じページで2つのフォームのインスタンスを使用できないという問題はどうしたらいいですか?

+0

ページ内で同じフォームの2つのインスタンスを使用できないのはなぜですか?両方のフォームをテンプレートに渡すだけで、送信時にどのフォームを処理するかをチェックするだけです。あなたは、このアプローチを行う際にあなたの正確な問題が何かを詳しく教えてもらえますか? – dbrumann

+0

私はFosUserBundleを使用しているので、私はコントローラーをうまくいきませんでした。私はちょうど 'RegisterFormType'を納得しました。 実際にform_widgetを使うと、最初のフォームはうまくいきますが、2番目のフォームは入力されません。研究室 –

+0

ああ、それは理にかなっている。 FOSUserBundleは、サインイン/サインインの対処方法にかなりの制約を課しています。 FOSUserBundleで登録を処理したり、バンドルを拡張したり、RegistrationControllerを上書きしたりすることはできませんか? – dbrumann

答えて

2

これについては、FOSUserBundleをオーバーライドしてからRegistrationControllerとおそらくthe corresponding templateを拡張します。条件は、おそらく同じように見えるかどう

/** @var $formFactory FactoryInterface */ 
$clientFormFactory = $this->get('client_registration.form.factory'); 
$clientForm = $clientFormFactory->createForm(); 
$clientForm->setData($client); 

/** @var $formFactory FactoryInterface */ 
$correspondentFormFactory = $this->get('correspondent_registration.form.factory'); 
$correspondentForm = $correspondentFormFactory->createForm(); 
$correspondentForm->setData($correspondent); 

$clientForm->handleRequest($request); 
$correspondentForm->handleRequest($request); 

if ($clientForm->isSubmitted() && $clientForm->isValid()) { 
    // ... 
} elseif ($correspondentForm->isSubmitted() && $correspondentForm->isValid()) { 
    // ... 
} 

return $this->render(
    '@FOSUser/Registration/register.html.twig', 
    [ 
     'clientForm' => $clientForm->createView(), 
     'correspondentForm' => $correspondentForm->createView(), 
    ] 
); 

一部内側:registerActionあなたがthe originalの一部を再利用することができますが、フォームが作成された場所が、2つの異なるものを作成し、多分このように

元のコントローラについては、あなたは、それぞれのユーザタイプごとに異なるUserManagerを持っているかもしれませんが、あなたはそれを外す必要がありますが、基本的にはpre-eventディスパッチ、ユーザ保存、post-eventディスパッチ、リダイレクトです。 FOSUserBundleの他の部分がそれらに依存するように、両方のイベントをディスパッチすることが重要です。登録メールを送信する。

テンプレートでは、両方のフォームをタブでレンダリングするだけです。あなたはフォームのIDで少しでも手間をかけなければならないかもしれませんが、それは簡単であるはずです。

+0

dbrumannがうまくいきました:) –

関連する問題