4

同じページに 2 つのフォーム (データは 2 つの無関係なエンティティにあります) を埋め込み、1 つの送信ボタンだけでフォームを送信する方法はありますか?

アイデアは、送信された両方のフォームを 1 つのコントローラー アクションのみで検証することです。

Entity1Entity2にはまったく共通点がありません。

                                  |--------------------------
                                  |    Form 1 (Entity 1)    |
                                  |--------------------------
 ---------------                  |
 |  Main Form  |------------------
 ---------------                  |
                                  |--------------------------
                                  |    Form 2 (Entity 2)    |
                                  |--------------------------

これが可能かどうか誰にもわかりませんか?

どうもありがとう。

4

2 に答える 2

2

それが可能だ。このようなものが動作するはずです:

$entity1 = new Entity1();
$entity2 = new Entity2();

$form = $this->createMainForm();

$form->setData(array(
    'entity1' => $entity1,
    'entity2' => $entity2,
));

if ($request->isMethod('POST')) {
    $form->bindRequest($request);
    if ($form->isValid()) {
        // $entity1 and $entity2 should contain the post data
        // and can be persisted or whatever it is you want to do
        // ...

両方のエンティティを含むモデルを作成し、そのフォームを作成することもできます。$mainEntity->getEntity1();カプセル化されたエンティティを取得するために使用します。

于 2013-08-26T14:31:15.877 に答える
0

シンフォニー 3.20

FormType をビルドするときは、以下のようにコントローラーでルートとアクションを実行し、「if ($formRegister->isSubmitted() && $formRegister->getClickedButton('form2') &&...)」を使用します。

class WelcomeController extends Controller
{
    /**
     * @Route("/welcome", name="welcome")
     */

    public function welcomeAction(Request $request)
    {



        $uLogin = new User();
        $formLogin = $this->createForm(LoginUserFormType::class, $uLogin);



        $uRegister = new User();
        $formRegister = $this->createForm(UserRegistrationFormType::class, $uRegister);



        $authenticationUtils = $this->get('security.authentication_utils');
        $error = $authenticationUtils->getLastAuthenticationError();
        // last username entered by the user
        $lastUsername = $authenticationUtils->getLastUsername();




        if ($request->isMethod('post')){

            $formLogin->handleRequest($request);
            $formRegister->handleRequest($request);

            if($formLogin->isSubmitted() && $formLogin->getClickedButton('form1')){


                return $this->redirectToRoute('login_success');
            }

            if ($formRegister->isSubmitted()  && $formRegister->getClickedButton('form2') && $formRegister->isValid() ) {


                $password = $this->get('security.password_encoder')
                    ->encodePassword($uRegister, $uRegister ->getPlainPassword());
                $uRegister ->setPassword($password);

                $uRegister->setRole('ROLE_USER');


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


                return $this->redirectToRoute('register_success');

            }


        }









        return $this->render(
        'form/welcome.html.twig',
            array(
                'form1' => $formLogin -> createView(),
                'form2' => $formRegister -> createView(),
                'last_username' => $lastUsername,
                'error'         =>  $error,
            )
        );
    }

ルーティングを構築してください。それだけです:-)

于 2016-12-30T14:34:54.213 に答える