2016-10-14 46 views
0

Symfony 2,Symfony 3.如何改變多對多關係在窗體中的顯示方式?例如,如何使用複選框在一行中顯示多對多關係實體標識,而不是默認的複選框列?如何使用Symfony2或Symfony 3自定義表單中的多對多字段?

任何人都可以參考一個示例窗體?

我在樹枝模板嘗試:

{% for admin in form.admins %} 

{{ admin.username }} //gives error that method GetUsername is not found 

{{ form_widget(form.offsetGet(admin.username)) }}, //gives error that method GetUsername is not found 

{% endfor %} 

的EventType.php

<?php 

namespace MeetingBundle\Form; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 
use Symfony\Component\OptionsResolver\OptionsResolverInterface; 
use Symfony\Component\Form\Extension\Core\Type\HiddenType; 

class EventType extends AbstractType 
{ 
    /** 
    * @param FormBuilderInterface $builder 
    * @param array $options 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('title', 'text', array( 
       'attr' => array('style' => 'width: 500px',), 'data' => 'title',)) 
      ->add('keywords', 'text', array( 
       'attr' => array('style' => 'width: 500px',), 'data' => 'keyow',)) 
      ->add('zip', 'text', array( 
       'attr' => array('style' => 'width: 500px',), 'data' => 'zip',)) 
      ->add('latitude', 'text', array( 
       'attr' => array('style' => 'width: 500px',), 'data' => 'latitude',)) 
      ->add('longitude', 'text', array( 
       'attr' => array('style' => 'width: 500px',), 'data' => 'longitude',)) 
      ->add('starttimeInt', 'hidden', array('data' => '0',)) 
      ->add('endtimeInt', 'hidden', array('data' => '0',)) 
      ->add('starttimeStr', 'text', array( 
       'attr' => array('style' => 'width: 500px',), 'data' => '21-12-2015 4:15 Europe/London',)) 
      ->add('endtimeStr', 'text', array( 
       'attr' => array('style' => 'width: 500px',), 'data' => '21-12-2015 4:15 Europe/London',))     
      ->add('address', 'textarea', array(
           'label' => 'Address starting with post code', 
           'data' => 'BR13RX', 
           'attr' => array('rows' => 2, 'cols' =>80,),)) 
      ->add('details', 'textarea', array(
           'label' => 'Details', 
           'data' => 'x', 
           'attr' => array('rows' => 20, 'cols' =>80,), 
           'max_length' => '5000')) 
      ->add('contacts', 'textarea', array(
           'label' => 'Contact methods', 
           'data' => 'x', 
           'attr' => array('rows' => 4, 'cols' =>80,), 
           'max_length' => '4000') ) 
      ->add('admins', 'entity', array(
         'class' => 'MeetingBundle\Entity\User', 
         'property' => 'username', 
         'multiple' => true, 
         'expanded' => true )) 
      ->add('attendees', 'entity', array(
         'class' => 'MeetingBundle\Entity\User', 
         'property' => 'username', 
         'multiple' => true, 
         'expanded' => true )) ; 
    } 

    /** 
    * @param OptionsResolverInterface $resolver 
    */ 
    public function setDefaultOptions(OptionsResolverInterface $resolver) 
    { 
     $resolver->setDefaults(array('data_class' => 'MeetingBundle\Entity\Event')); 
    } 

    /** 
    * @return string 
    */ 
    public function getName() 
    { 
     return 'meetingbundle_event'; 
    } 

} 

回答

0

如果您使用的引導(如braincrafted),您可以添加到窗體字段定義:'attr' => ['class' => 'form-inline',],

相關問題