2012-10-28 32 views
3

我想在表单中显示复选框的动态列表。如何使用Symfony 2中的ChoiceListInterface?

到目前为止,我构建了一个嵌入静态复选框列表的表单,并且我为不同语言的不同值创建了一个Tag实体,并填充了数据库。我想用基于Tag实体的动态列表替换静态复选框。

documentation说我应该使用ChoiceListInterface。但它的记录确实很差。你会有一个例子或全球逻辑解释来帮助我吗?

回答

2

您可以扩展LazyChoiceList抽象类并实现loadChoiceList()方法,创建它的服务,将它注入到窗体中并将其设置为choice_list选项。

+0

谢谢,但这看起来很难实施;我没有在Google上找到这样的例子:( – Yako

+2

@Yako这很容易。像这样:http://stackoverflow.com/questions/13313415/symfony2-populate-choice-list-from-api-data :) – Tek

1

最后,我用了一个实体字段类型:

->add('tags', 'entity', array(
      'class' => 'bndMyBundle:Tag', 
      'query_builder' => function(EntityRepository $er){ 
       return $er->createQueryBuilder('t') 
         ->orderBy('t.en', 'ASC'); 
      }, 
      'expanded' => true, 
      'multiple' => true, 
      'property' => 'en', 
     )) 

然后,我只需要通过用户的当前语言环境来替换成“en”值来选择合适的语言。

+1

嘿Yako,这个答案根本没有解决这个问题 - 它不应该被标记为接受。来自@ m2mdas的人解决了这个问题。他的回答可能太短,但这与问题严格相关。我认为你应该不接受它,要么接受m2mdas的回答,要么不接受任何等待更好的解释。 (只是我的一面注意,好意) – bostaf

+0

是的,你说得对。感谢您的评论。 – Yako