2012-12-07 8 views
6

시스템의 모든 관리자를 표시하는 페이지를 코딩했습니다. 내가하고 싶은 일은 목록에서 현재 인증 된 사용자를 제외하도록 내 쿼리를 사용자 지정하는 것입니다.
컨트롤러에서 user_id을 가져와 엔티티 리포지토리에 전달할 수 있다는 것을 알았지 만 엔티티 리포지토리를 통해 직접 액세스하는 방법이 있는지 궁금합니다. 예를 들어Symfony2 엔티티 저장소에서 사용자 ID 가져 오기

:

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; 
    } 
} 

답변

1

그래서, 당신은 현재의 사용자 ID (의 말 $currentUserId하자)을 가지고, 당신은 $currentUserId 동일하지 않은 ID를 가진 모든 사용자에 대한 쿼리를 작성하려면?

이 시도 :

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

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

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

    ... 
    } 
} 

편집

아, 나는 ... 당신이 무슨 말을하는지

음을 참조 저장소 정말 외부 아무것도 블라인드해야한다 그 자체의 즉, 컨테이너를 인식하지 못하므로 현재 사용자가 누구인지 알 수 없습니다.

내 제안은 저장소에 특정 사용자 또는 사용자 ID를 제외한 모든 것을 가져 오는 기능을 제공하는 것입니다. 다음과 같이하십시오 :

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

그리고 "현재 사용자"로직을 컨트롤러에 넣으십시오. @security@doctrine에 액세스 할 수있는 서비스를 정의하고 거기에 모든 로직을 저장할 수도 있습니다. 귀하의 전화 번호,하지만 나는 당신이 확실히 당신의 저장소 보안 서비스에 무슨 일이 일어나지 말아야한다고 말하고 싶지만.

+0

내 질문이 업데이트되었습니다. 나는 당신이 말하는 것처럼 그것을 할 수 있다는 것을 알고 있지만'EntityRepository' 자체에서 할 수 있는지 찾고 있습니다. – tftd

+0

/updated ... 도움이 되겠습니다. –

+0

나는 똑같은 생각을하고 있었지만 저장소 (repository) 내에서 인증 된 사용자 데이터에 액세스 할 수있는 것은 논리적입니다. 당신의 도움을 주셔서 감사합니다 :) – tftd

-3

당신은 나뭇 가지 템플릿에 의해

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

저점 컨트롤러 또는 뷰에 의해 사용자 개체를 검색 할 수 있습니다

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

symfony 2 doc에서 온이 샘플.

+0

리포지토리에 넣을 수 없습니다. – Matheno

관련 문제