我有一个带有实体字段的表单,我使用自定义查询来检索所需实体。我想为特定用户检索实体。
我的表单字段如下:
->add('productService', 'entity', array(
'label' => 'Type',
'class' => 'EvoBackendBundle:ProductService',
'query_builder' => function(EntityRepository $er) {
return $er->createQueryBuilder('s')
->where('s.user = :user')
->setParameter('user', $this->user);
},
'property' => 'name',
))
要在我的表单类型中使用$ this-> user,我会在实例化InvoiceItemServiceType时注入它,如下所示:
$formInvoiceItemService = $this->createForm(new InvoiceItemServiceType($this->getUser()), $invoiceItemService);
然后使用表单类型构造函数设置属性:
public function __construct(\Evo\UserBundle\Entity\User $user)
{
$this->user = $user;
}
但我收到以下错误:
FatalErrorException: Error: Using $this when not in object context in [...]\Form\InvoiceItemServiceType.php line 36
看起来逻辑,$ this->用户使用了一个函数,这是行不通的。 如何过滤特定用户的自定义查询返回的实体?
答案 0 :(得分:2)
尝试:
$user = $this->user;
$builder->add('productService', 'entity', array(
'label' => 'Type',
'class' => 'EvoBackendBundle:ProductService',
'query_builder' => function(EntityRepository $er) use ($user) {
return $er->createQueryBuilder('s')
->where('s.user = :user')
->setParameter('user', $user);
},
'property' => 'name',
));