2015-12-28 6 views
0

У меня есть объект типа поля, который отображается как флажки. Я хочу добавить для каждого флажка поле типа textarea, как я могу это сделать?Symfony: Как добавить форму поля к ребенку?

Код:

// OfferType.php 
$builder 
    ->add('payment_method', new OfferPaymentType(), [ 
     'required' => false, 
     'mapped' => false, 
     'expanded' => true, 
     'multiple' => true, 
    ]) 
; 

// OfferPaymentType.php 
class OfferPaymentType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('payment', null, [ 
       'multiple' => true, 
       'expanded' => true, 
       'compound' => true, 
      ])  
     ; 

     $factory = $builder->getFormFactory(); 

     $formModifier = function (FormInterface $form, $payments = null) use ($factory) { 
      foreach ($form as $child) { 
       //dump($child);die; 
       $child->add(
        $factory->createNamed('metadata', 'textarea', null, [ 
         'auto_initialize' => false, 
         'compound' => true, 
        ]), 
        null, 
        ['compound' => true] 
       ); 

      } 
     }; 

     $builder->get('payment')->addEventListener(
      FormEvents::PRE_SET_DATA, 
      function (FormEvent $event) use ($formModifier) { 
       $data = $event->getData(); 
       $formModifier($event->getForm(), $data); 
      } 
     ); 
    } 

    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'multiple'   => true, 
      'expanded'   => true, 
      'class'    => 'AppBundle:OfferPayment', 
      'data_class'   => 'AppBundle\Entity\OfferPayment', 
      'translation_domain' => 'app', 
      'compound'   => true, 
     )); 
    } 

    public function getName() 
    { 
     return 'offer_payment'; 
    } 
} 
+0

Я думаю, что вы можете решить следующие шаги: 1- Создать форму нового типа с двумя полями s - checkbox и textarea 2- Создайте новую форму с созданной коллекцией нового типа. Но это зависит от того, что вам нужно делать. В любом случае, вы можете посмотреть в документе: [Как встроить коллекцию форм] (http://symfony.com/doc/current/cookbook/form/form_collections.html) – rck6982

+0

с помощью этого метода поле типа объекта будет флажок select box не установлен –

ответ

1

Вам нужно создать пользовательский тип формы, которые Собираюсь Два встроенных полей флажок и текстовое поле

class OfferPaymentType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('payement', 'checkbox') 
       ->add('metadata', 'textarea'); 
    } 
} 

И в вашей форме типа вы будете делать что-то вроде

class CustomType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('payment_method', 'collection', array(
       'type'   => new OfferPaymentType(), 
       'allow_add' => true, 
       'allow_delete' => true 
      ) 
     ); 

    } 
} 
+0

Мое поле - это поле объекта с расширенным и множественным значением, равным true, есть ли способ изменить дочерние элементы поля объекта? –

+0

Если я действительно понимаю вашу потребность, вы хотите изменить в той же форме свою сущность и там дети, если да, чтобы вы могли использовать встроенную форму http://symfony.com/doc/current/cookbook/form/form_collections. html –

+0

Да, в классе формы sampe я слушаю событие 'PRE_SET_DATA' в полях сущности, но когда я пытаюсь добавить новое поле к дочернему, он показывает мне ошибку' Вы не можете добавить детей в простую форму. Может быть, вы должны установить опцию «соединение» в true ?, потому что ее заблокирован –

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