douyan2821 2014-10-20 20:09
浏览 26
已采纳

获取用于querybuilder的实体中的用户电子邮件 - Symfony

How I can get the logged user email in entity for query builder to select items which has been created by current user?

My entity field:

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

Create form method:

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

2条回答 默认 最新

  • dongru3726 2014-10-20 20:17
    关注

    For that you will have to pass the logged in user to the form.

    To pass the user as an option to your Form class, you can do this:

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

    Then, when you create the form on the controller, you pass the logged in user this way:

    $form = $this->createForm(new YourFormType(), $yourObject, array('user' => $this->getUser()));
    

    Update: For your code, it should be like this:

    $user = $this->get('security.context')->getToken();
    $form = $this->createForm(new RFQType(), $entity, array(
       'action' => $this->generateUrl('rfq_create'),
       'method' => 'POST',
       'user' => $user,
    ));
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用