我想在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传递给此函数?
您可以使用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);
}
一个很好的方法是在创建表单时使用选项数组,因此在数组中传递id,然后在表单中传递do:
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);
}
))
;
}