2016-04-21 3 views
0

У меня есть следующая модель в Symfony2 из-за того, что отношение имеет дополнительное свойство (логическое значение) и как таковое должно быть представлено как сущность тоже. enter image description here Я сейчас работаю над формой, чтобы отметить завершение тренировок для различных Кандидатов (Родителей), которые посетили.
Я использую вложенную форму следующим образом:Вложенная проблема с отображением формы M: Symfony2

class TrainingCompletionType extends AbstractType 
    { 
     public function buildForm(FormBuilderInterface $builder, array $options) 
     { 
      $builder 
      ->add('titre', 'text', array('disabled' => 'true')) 
      ->add('Intervenant', 'collection', array(
            'type' => new TrainingCandidatesType(),'label'=>'Candidat(s)' 
            ,'options' => array('label'=>' ')) 
      ); 
     } 

Вот TrainingCandidatesType форма

class TrainingCandidatesType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('parents','entity',array('class'=>'ParentsBundle:Parents' 
              ,'label'=>' ','disabled'=>true)) 
      ->add('completed') 
     ; 
    } 

Это работает (представление родителей проверил завершено), однако это приводит к тому, прут чтобы каждый родитель представлял собой раскрывающийся список, в котором каждый родитель считался значением, как показано ниже enter image description here. Я отключил раскрывающееся меню, так как пользователь не был выбран для выбора из списка. Имя кандидата не предназначено для выбора.

Есть ли способ отобразить каждое из родительских имен в качестве метки или отключить ввод текста в Symfony без обращения к преобразователю данных или подписчику Event?
Я рассмотрел связанные вопросы на сайте Stack, но не нашел ничего похожего на эту проблему.

Есть ли лучший подход к этому, который я хочу попробовать? или я подхожу к нему из-за угла?

ответ

1

Поскольку вам нужно только логическое значение, существует отличный вариант с использованием расширенного и множественного.

public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('parents','entity',array(
        'class'=>'ParentsBundle:Parents', 
        'label'=>'Label', 
        'expanded'=>true, 
        'multiple'=>true 
      )) 
     ; 
    } 

Но в этом случае вам понадобится преобразователь данных. Вы также можете использовать this bundle, который преобразует данные для вас, но это немного больше, чем вам нужно.

Возможно, наилучшим вариантом является также mapped=>false, а с выбранным набором объектов обрабатывать экземпляры Training_Candidates в контроллере. Выбранная коллекция будет создана с истинным, а остальная часть должна быть загружена из базы данных и создана с помощью false. Также обратите внимание, что таким образом вам не нужна вложенная форма, вы можете использовать ее в одной форме.

Надеюсь, это может вам помочь.

+0

Благодарим Вас за отзыв! Я думаю, что второй вариант намного проще понять и реализовать. Попробуем! –

Смежные вопросы