我想在Symfony 2中构建一个Entity
字段类型,并将参数传递给查询构建器以获取相关对象的过滤器列表:
$formMapper
->add('article_subcategories', 'entity',
array(
'label' => 'Podkategorie',
'multiple' => true,
'expanded' => true,
'read_only' => true,
'class' => 'FachowoArticleBundle:ArticleSubcategory',
'query_builder' => function (EntityRepository $er)
{
return $er
->createQueryBuilder('sc')
->where('sc.article_category = :id')
->orderBy('sc.name', 'ASC')
->setParameter('id', $id);
}
));
如何在formMapper中将$ id传递给此函数?
答案 0 :(得分:8)
您可以使用PHP 5.3的闭包。大多数带闭包的语言会自动执行此操作,但PHP要求您明确指定列表。
'query_builder' => function (EntityRepository $er) use ($id)
{
return $er
->createQueryBuilder('sc')
->where('sc.article_category = :id')
->orderBy('sc.name', 'ASC')
->setParameter('id', $id);
}
答案 1 :(得分:1)
一种很好的方法是在创建表单时使用options数组,因此在数组中传递id,然后在表单中执行:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$id = $options['id'];
$builder
->add('foo', 'entity', array(
'class' => 'Foo',
'query_builder' => function (EntityRepository $er) use ($id) {
return $er->findByBar($id);
}
))
;
}