2012-05-10 14 views
42

में लॉग इन हो रहा है मैं सिम्फनी 2 और सिद्धांत 2 का उपयोग कर एक एप्लीकेशन विकसित कर रहा हूं। मैं जानना चाहता हूं कि मैं वर्तमान में उपयोगकर्ता के आईडी में कैसे लॉग इन कर सकता हूं।Symfony2 उपयोगकर्ता की आईडी

+0

symfony2.1 नियंत्रकों में, आप $-- getUser() को कॉल करके उपयोगकर्ता प्राप्त कर सकते हैं। मुझे लगता है कि यह सिम्फनी के इस संस्करण में नया है। – PMoubed

उत्तर

112

वर्तमान Symfony संस्करणों (Symfony 4, Symfony> = 3,2)

Since Symfony >=3.2 आप बस उम्मीद कर सकते हैं एक UserInterface कार्यान्वयन सीधे अपने नियंत्रक कार्रवाई करने के लिए इंजेक्ट किया जा करने के लिए। इसके बाद आप उपयोगकर्ता के पहचानकर्ता को पुनः प्राप्त करने getId() कॉल कर सकते हैं:

class DefaultController extends Controller 
{ 
    // when the user is mandatory (e.g. behind a firewall) 
    public function fooAction(UserInterface $user) 
    { 
     $userId = $user->getId(); 
    } 

    // when the user is optional (e.g. can be anonymous) 
    public function barAction(UserInterface $user = null) 
    { 
     $userId = null !== $user ? $user->getId() : null; 
    } 
} 

तुम अब भी सुरक्षा टोकन भंडारण के रूप में सभी Symfony संस्करणों में 2.6 के बाद से उपयोग कर सकते हैं। उदाहरण के लिए, अपने नियंत्रक में:

$user = $this->get('security.token_storage')->getToken()->getUser(); 

ध्यान दें कि Controller::getUser() शॉर्टकट इस उत्तर के अगले भाग में वर्णित Symfony 3 में बहिष्कृत है और 4,0

विरासत Symfony संस्करणों

Symfony में हटा दिया गया था

बेस नियंत्रक का विस्तार करने के लिए उपयोग किए जाने वाले उपयोगकर्ता तक पहुंचने का सबसे आसान तरीका, और शॉर्टकट getUser() विधि (सिम्फनी 4 में हटाया गया) का उपयोग करें:

$user = $this->getUser(); 

Symfony 2.6 जब से तुम सुरक्षा टोकन संग्रहण से किसी उपयोगकर्ता को पुनः प्राप्त कर सकते हैं:

$user = $this->get('security.token_storage')->getToken()->getUser(); 

Symfony 2.6 से पहले, टोकन के बजाय सुरक्षा संदर्भ सेवा से पहुँचा जा सकता था:

$user = $this->get('security.context')->getToken()->getUser(); 

ध्यान दें कि सुरक्षा संदर्भ सेवा को सिम्फनी 2 में हटा दिया गया है और Symfony 3.0 में हटा दिया गया था।

+2

अच्छा जवाब। ** उपयोगकर्ता ऑब्जेक्ट से अन्य फ़ील्ड प्राप्त करें ** जैसे ईमेल, फर्स्टनाम या लिंग। इस तरह प्रयोग करें। लिंग प्राप्त करने के लिए, ** 'लिंग है:' गूंजें। $ उपयोगकर्ता-> getGender(); ** – webblover

+0

3.0 में हटाए जाने के लिए संस्करण 2.6 के बाद से बहिष्कृत। ! – Zagloo

2

आप नीचे दिए गए कोड के साथ चर प्राप्त कर सकते हैं:

$id = $this->getUser()->getId(); 
+1

खराब अभ्यास, परिवर्तनीय नाम '$ userId' होना चाहिए – GusDeCooL

13

symfony2 में, हम इस कोड द्वारा इस सरल प्राप्त कर सकते हैं

/** 
* Get user id 
* @return integer $userId 
*/ 
protected function getUserId() 
{ 
    $user = $this->get('security.context')->getToken()->getUser(); 
    $userId = $user->getId(); 

    return $userId; 
} 

और प्रेरण $ this-> getUserId()

public function example() 
{ 
    print_r($this->getUserId()); 
} 
0

इस विधि में तैयार हो जाओ कर सकते हैं::

$userId = $this->get('security.context')->getToken()->getUser()->getId(); 
संबंधित मुद्दे