2012-12-07 16 views
6

Ho codificato una pagina che mostra tutti gli amministratori del sistema. Quello che voglio fare è personalizzare la mia query in modo che escluda l'utente attualmente autenticato dall'elenco.
Ora so che posso ottenere il user_id dal controller e passarlo al repository dell'entità, ma mi chiedevo se c'è un modo per accedervi direttamente attraverso il repository di entità?Symfony2 ottiene l'id utente nel repository dell'entità

Ad esempio:

use Doctrine\ORM\EntityRepository; 
use Doctrine\ORM\NoResultException; 

use Symfony\Component\Security\Core\User\UserInterface; 
use Symfony\Component\Security\Core\User\UserProviderInterface; 
use Symfony\Component\Security\Core\Exception\UsernameNotFoundException; 
use Symfony\Component\Security\Core\Exception\UnsupportedUserException; 

class AdminUserRepository extends EntityRepository implements UserProviderInterface 
{ 
    public function getAdmins($int = 10, $offset = 0, array $orderBy = array('admin_id', 'asc')){ 
     $admin_id = fetch the admin id ?; 
     $query = $this->createQueryBuilder('admins') 
      ->where("admins.admin_id != '".$admin_id."'") 
      ->orderBy('admins.'.$orderBy[0], $orderBy[1]) 
      ->setFirstResult($offset) 
      ->setMaxResults($int) 
      ->getQuery() 
      ->getResult(); 
     return $query; 
    } 
} 

risposta

1

Quindi, si dispone di un ID utente corrente (diciamo, $currentUserId), e si desidera scrivere una query per tutti gli utenti con un ID che non è pari a $currentUserId?

Prova questo:

class SomeController 
{ 
    public function someAction() 
    { 
     ... 

     $qb = $userRepository->createQueryBuilder("user") 
      ->where("user.id != ?1") 
      ->setParameter(1, $currentUserId); 

     $usersExcludingCurrent = $qb->getQuery()->getResult(); 

    ... 
    } 
} 

modificare

Ahh, vedo quello che stai dicendo ...

Ebbene, il repository in realtà dovrebbe essere ciechi per nulla al di fuori di per sé. Cioè, non è consapevole del contenitore, e quindi non dovrebbe sapere chi è l'utente corrente.

Il mio suggerimento sarebbe di fornire al repository una funzione che ottenga tutto tranne un particolare utente o ID utente. Qualcosa di simile:

class AdminUserRepository extends EntityRepository implements UserProviderInterface 
{ 
    public function getAllAdminsExcept($userId, $int = 10, $offset = 0, array $orderBy = array('admin_id', 'asc')) 
     { 
      ... 
     } 
} 

E quindi inserire la logica "Utente corrente" nel controller. Potresti anche definire un servizio che ha accesso sia a @security e a @doctrine, che ospita tutta la logica. La tua chiamata, ma direi che dovresti assolutamente tenere il tuo repository inconsapevole di qualsiasi cosa succeda nel servizio di sicurezza.

+0

Ho aggiornato la mia domanda. So che potrei farlo come dici tu, ma sto cercando se sia possibile farlo nel 'EntityRepository' stesso. – tftd

+0

/aggiornato ... spero che aiuti. –

+0

Stavo pensando la stessa cosa ma è logico (per me) essere in grado di accedere ai dati utente autenticati da un repository. Grazie per l'aiuto :) – tftd

-3

È possibile recuperare oggetto utente da

public function indexAction() 
{ 
    $user = $this->getUser(); 
} 

controller di depressione o vista da Twig Template:

<p>Username: {{ app.user.username }}</p> 

questo campione provengono da symfony 2 doc.

+0

Non è possibile nel repository – Matheno

Problemi correlati