2016-01-12 3 views
10

У меня есть форма в Symfony3, который я инициализирует - следуя документации - как следует:Symfony3: Построить FormType

$form=$this->createForm(BookingType::class,$booking); 

$ бронирования уже существующий объект, который я хочу изменить - но я хочу изменять форму в зависимости от объекта - как:

public function buildForm(FormBuilderInterface $builder,$options) { 
    $builder->add('name'); 
    if(!$this->booking->getLocation()) { 
     $builder->add('location'); 
    } 
} 

до Symfony 2.8 можно было построить FormType как:

$form=$this->createForm(new BookingType($booking),$booking); 

Это именно то, что я хочу :) Но в Symfony3 этот метод выдает исключение. Как передать объект в свой формат?

+1

Вы можете использовать форму события для этого: http://symfony.com/doc/current/components/form/ form_events.html – xabbuh

+3

В вашей формеType, я думаю, вы можете сделать '$ entity = $ builder-> getData()' – pbenard

+0

@ Put12co22mer2 thats it - отлично работает! – cklm

ответ

6

Вы также можете изменить тип формы на основе пользовательских параметров.

В типа формы:

public function buildForm(FormBuilderInterface $builder, $options) { 
    $builder->add('name'); 

    if($options['localizable']) { 
     $builder->add('location'); 
    } 
} 

public function configureOptions(OptionsResolver $resolver) 
{ 
    $resolver->setDefaults(array(
     'localizable' => true, 
    )); 
} 

В контроллере:

$form = $this->createForm(BookingType::class, $booking, array(
    'localizable' => !$booking->getLocation(), 
)); 
+0

Работает для меня, спасибо вам большое, я не помню, как изменить параметры по умолчанию! –