2016-11-03 118 views
1

在我的应用程序中,用户可以有多种语言,因此UserLanguage实体之间通过ManyToOne关系相关。Symfony 2.8 - 表单集合类型呈现仅标签

在用户实体类:

/** 
* @ORM\OneToMany(targetEntity="TraineeLanguage", mappedBy="trainee", cascade={"persist"})) 
*/ 
private $languages; 

public function __construct() 
{ 
    $this->languages = new ArrayCollection(); 
} 

在语言实体类:

/** 
* @ORM\ManyToOne(targetEntity="Trainee", inversedBy="languages") 
* @ORM\JoinColumn(name="trainee_id", referencedColumnName="id") 
*/ 
private $trainee; 

现在我想创建的用户配置文件的形式语言形式的集合:

->add('languages', CollectionType::class, array(
    'type' => TraineeLanguageType::class, 
    'required' => false 
)) 

我的语言形式等级:

class TraineeLanguageType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('language', TextType::class, array(
       'attr' => array(
        'placeholder' => 'Language' 
       ), 
       'required' => false 
      )) 
      ->add('level', TextType::class, array(
       'attr' => array(
        'placeholder' => 'Level' 
       ), 
       'required' => false 
      )); 
    } 
    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver 
      ->setDefaults(array(
       'data_class' => 'IndexBundle\Entity\TraineeLanguage' 
      )); 
    } 

    public function getName() 
    { 
     return 'language'; 
    } 
} 

现在,当我尝试显示

{{ form_row(trainee_background_information_form.languages) }} 

只有标签显示形式。

而且它不与工作:

{{ form_widget(trainee_background_information_form.languages) }} 

{% for language in trainee_background_information_form.languages %} 
    {{ form_row(language) }} 
{% endfor %} 

是否在我的代码任何人通知的错误,知道是怎么回事?

回答

2

当您使用集合类型时,您需要编写额外的html & js来处理此类字段。更多的是在Symfony文档中:http://symfony.com/doc/current/reference/forms/types/collection.html

+0

我完全错过了添加,删除按钮的部分。由于MopaBootstrap和BraincraftedBootstrap包呈现了视图,我认为它们只是样式而不是创建JS功能。谢谢,现在一切都很好。 –