在实体表单字段中的自定义查询中注入用户

时间:2014-09-04 08:12:06

标签: forms symfony entity filtering

我有一个带有实体字段的表单,我使用自定义查询来检索所需实体。我想为特定用户检索实体。

我的表单字段如下:

->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->用户使用了一个函数,这是行不通的。 如何过滤特定用户的自定义查询返回的实体?

1 个答案:

答案 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',
));

阅读详情:http://php.net/manual/en/functions.anonymous.php