2012-12-07 17 views
6

मैंने एक पृष्ठ कोड किया है जो सिस्टम के सभी प्रशासकों को प्रदर्शित करता है। मैं अपनी क्वेरी को कस्टमाइज़ करना चाहता हूं ताकि वह वर्तमान में प्रमाणीकृत उपयोगकर्ता को सूची से बाहर कर दे।
अब मुझे पता है कि मैं नियंत्रक से user_id प्राप्त कर सकता हूं और इसे इकाई भंडार में भेज सकता हूं, लेकिन मैं सोच रहा था कि क्या सीधे एंटिटी रिपोजिटरी के माध्यम से इसका उपयोग करने का कोई तरीका है?Symfony2 इकाई भंडार में उपयोगकर्ता आईडी प्राप्त करें

उदाहरण के लिए:

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

तो, यदि आप एक मौजूदा उपयोगकर्ता आईडी (मान लें, $currentUserId) है, और आप एक आईडी कि $currentUserId के बराबर है नहीं के साथ सभी उपयोगकर्ताओं के लिए एक प्रश्न लिखना चाहते हैं?

इस प्रयास करें:

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

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

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

    ... 
    } 
} 

संपादित

आह, मैं देख रहा हूँ कि तुम क्या कह रहे हो ...

खैर, भंडार वास्तव में बाहर कुछ भी करने के लिए अंधा होना चाहिए खुद का यही है, यह कंटेनर-जागरूक नहीं है, और इसलिए यह नहीं पता होना चाहिए कि वर्तमान उपयोगकर्ता कौन है।

मेरा सुझाव आपके भंडार को एक ऐसा फ़ंक्शन देना होगा जो किसी विशेष उपयोगकर्ता या उपयोगकर्ता आईडी को छोड़कर सबकुछ प्राप्त कर ले। कुछ की तरह:

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

/अद्यतन ... उम्मीद है कि मदद करता है। –

+0

मैं वही बात सोच रहा था लेकिन यह एक प्रकार के तार्किक (मेरे लिए) एक भंडार के भीतर से प्रमाणित उपयोगकर्ता डेटा तक पहुंचने में सक्षम होने के लिए है। आपकी सहायता के लिए धन्यवाद :) – tftd

-3

आप टहनी खाका द्वारा

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

गर्त नियंत्रक या देखने से उपयोगकर्ता वस्तु प्राप्त कर सकते हैं:

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

इस नमूने symfony 2 doc से आते हैं।

+0

आप भंडार में नहीं जा सकते – Matheno

संबंधित मुद्दे