2016-02-07 2 views
3

У меня есть 2 Symfony формы:Как слить и обработать 2 формы symfony в одном?

SignupFormType и HouseRentFormType

Регистрация Форма выглядеть следующим образом:

<form ..> 
<input name='email' .. /> 
<input name='pass' .. /> 
.. 
</form> 

, и дом в аренду форме, как это:

<form ..> 
<input name='city' .. /> 
<input name='price' .. /> 
</form ..> 

Я хочу объединить они выглядят так:

<form ..> 
// house rent info: 
<input name='city' .. /> 
<input name='price' .. /> 

//registration info: 
<input name='email' .. /> 
<input name='pass' .. /> 
<input type='submit' /> 
</form ..> 

А также для создания типа формы или smthng. Любые советы о том, как обращаться с submit?

p.s. Я использую symfony/form:^3.0

ответ

7

С формами Symfony все это тип формы. Таким образом, один из них имеет корневой тип с дочерними типами. Каждый тип ребенка может иметь другие дочерние типы и т. Д.

В этом случае у вас есть 2 вида форм: SignupFormType и HouseRentFormType. Вы можете использовать их как типы детей новой формы:

$form = $formBuilder 
    ->add('signup', SignupFormType::class) 
    ->add('house_rent', HouseRentFormType::class) 
    ->getForm(); 
+0

Он работал идеально, спасибо большое :) – Keloo

3

Я хотел бы выразить ответ @Wouter J, потому что он не работает для меня способ выше.

я должен был определить data_class в formbuilder:

class SignupHouseRentFormType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('signup', SignupFormType::class, array(
       'data_class' => Signup::class 
      )) 
      ->add('house_rent', HouseRentFormType::class, array(
       'data_class' => HouseRent::class 
      )); 
    } 
} 

затем в контроллере я должен был использовать одно пространство имен для связывания данных:

class SignupHouseRentController extends Controller 
{ 

    public function indexAction(Request $request) 
    { 
     $signup = new Signup(); 
     $houseRent = new HouseRent(); 

     $mergedData = array(
      'signup' => $signup, 
      'houseRent' => $houseRent 
     ); 

     $form = $this->createForm(SignupHouseRentFormType::class, $mergedData); 
     $form->handleRequest($request); 
    } 
} 
Смежные вопросы