2013-08-26 77 views
4

是否有方法在同一頁上嵌入兩個表單(數據位於2個不相關的實體)並僅用一個提交按鈕提交表單?提交在同一頁上呈現的兩個不相關的表單

這個想法是驗證兩個提交的表單只有一個控制器的行動。

實體1實體2沒有什麼共同之處。

        |-------------------------- 
            | Form 1 (Entity 1) | 
            |-------------------------- 
---------------     | 
| Main Form |------------------ 
---------------     | 
            |-------------------------- 
            | Form 2 (Entity 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();來檢索封裝的實體。

+0

非常感謝@mahok!我想知道如何在$ this-> createMainForm中創建表單類型?因爲它在兩個不同的實體上嵌入了兩種不同的類型... – Mick

+1

您只需添加兩個實體:'$ builder-> add('entity1','entity',array('class'=> ...) '在MainFormType中。 – dbrumann

+0

但是這是一個實體字段類型...它將顯示保存在Entity1中的所有對象的選擇列表......這並不完全是我在實際完成後我所要做的是顯示一個用於entity1的表單,同時顯示entity2的表單,而不是entity1中保存的對象列表以及entity2中保存的對象列表。無論如何,您創建模型的想法似乎是要走的路。我正在試一試,並會相應地接受你的回答:)非常感謝@mahok。很好的答案很可能引導我朝着一個可行的解決方案:) – Mick

0

Symfony的3.20

當你建立你的FormType,在控制器執行&動作像下面的路線,用「如果($ formRegister-> isSubmitted()& & $ formRegister-> getClickedButton( '窗口2')& & ...)」

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

建立你的路由,那就是它: - )

相關問題