2014-10-20 73 views
0

我如何獲取記錄的用戶電子郵件在實體查詢生成器來選擇已由當前用戶創建的項目?在實體中獲取記錄的用戶電子郵件querybuilder - Symfony

我的實體領域:

->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() 
)); 

回答

1

對於您將不得不通過登錄的用戶到窗體。

要通過用戶作爲一個選項,你的Form類,你可以這樣做:

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, 
)); 
+0

謝謝你的快速答案,但我怎麼能正確傳遞用戶對象來創建窗體方法?我用這種方法更新了我的問題,但它引發了一個錯誤... – RydelHouse 2014-10-20 20:36:27

+0

錯誤說我無法傳遞一個對象。我需要傳遞一個數組... – RydelHouse 2014-10-20 20:47:43

+0

我更新了你的代碼的答案。 – lsouza 2014-10-20 21:17:54

1

通常情況下, 我創建一個偵聽器/服務,返回我登錄的用戶,然後我就打電話,我需要

監聽

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() 
相關問題