Php 获取querybuilder的登录用户电子邮件实体-Symfony

Php 获取querybuilder的登录用户电子邮件实体-Symfony,php,symfony,Php,Symfony,如何在实体中获取登录用户电子邮件,以便查询生成器选择当前用户创建的项目 我的实体字段: ->add('rfqitem', 'entity', array( 'label' => 'RFQ Items', 'class' => 'RFQ\IronilBundle\Entity\RFQItem', 'multiple' => true, 'expanded' => false,

如何在实体中获取登录用户电子邮件,以便查询生成器选择当前用户创建的项目

我的实体字段:

->add('rfqitem', 'entity', array(
    'label'         => 'RFQ Items',
    'class'         => 'RFQ\IronilBundle\Entity\RFQItem',
    'multiple'      => true,
    'expanded'      => false,
    'attr'          => array(
        'class'         => 'rfq-item-choser'),
    'query_builder' => function ($eer){
        return $eer
            ->createQueryBuilder('a')
            ->where('a.user_email = :email')
            ->setParameter('email', 'LOGGED USER EMAIL');},
))
创建表单方法:

$user = $this->get('security.context')->getToken();
$form = $this->createForm(new RFQType(), $user, $entity, array(
   'action' => $this->generateUrl('rfq_create'),
   'method' => 'POST',
   'user' => $this->getUser()
));

为此,您必须将登录用户传递给表单

要将用户作为选项传递给表单类,可以执行以下操作:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $user = $options['user'];

    $builder
        ->add('rfqitem', 'entity', array(
            /** other options **/
            'query_builder' => function ($eer) use ($user) {
                return $eer
                    ->createQueryBuilder('a')
                    ->where('a.user_email = :email')
                    ->setParameter('email', $user->getEmail());
            },
        ))
    ;
}

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    /** lot's of code **/

    $resolver->setRequired(array(
        'user',
    ));
}
然后,在控制器上创建表单时,通过以下方式传递登录用户:

$form = $this->createForm(new YourFormType(), $yourObject, array('user' => $this->getUser()));
更新:对于您的代码,应该如下所示:

$user = $this->get('security.context')->getToken();
$form = $this->createForm(new RFQType(), $entity, array(
   'action' => $this->generateUrl('rfq_create'),
   'method' => 'POST',
   'user' => $user,
));
通常情况下, 我创建了一个侦听器/服务,它将返回已登录的用户,然后在需要的地方调用

听众

class LoggedUser {

protected $security_context;

public function __construct($securityContext){
    $this->security_context = $securityContext;
}

public function getLoggedUser(){
    return $this->security_context->get('security.context')->getToken()->getUser();
}
}

声明服务

util.getLoggedUser:
    class: %util.getLoggedUser.listener%
    arguments: [@service_container]
和呼叫:

$logged_user = $this->get('util.getLoggedUser')->getLoggedUser()

感谢您的快速回答,但我如何才能正确地将用户对象传递给创建表单方法呢?我用这个方法更新了我的问题,但它给我带来了一个错误。。。