2012-09-29 17 views
33

मैं अपने उपयोगकर्ताओं को प्रमाणीकृत करने के लिए FOSUserBundle का उपयोग कर रहा हूं।Symfony2: FOSUserBundle का उपयोग करते समय उपयोगकर्ता ऑब्जेक्ट को नियंत्रक के अंदर कैसे प्राप्त करें?

मैं एक यात्रा रजिस्टर करने के लिए उपयोगकर्ता ऑब्जेक्ट को नियंत्रक के अंदर लाने का प्रयास कर रहा हूं जहां मुझे सहेजने से पहले इस ऑब्जेक्ट में उपयोगकर्ता ऑब्जेक्ट जोड़ना चाहिए।

मैं नहीं मिला था कैसे है कि क्योंकि अगली विधि जहां मैं इसे सिम्फोनी दस्तावेज़ में पाया करने के लिए:

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

स्ट्रिंग के रूप में उपयोगकर्ता नाम प्रस्तुत हुई है, लेकिन मैं पूरी वस्तु की जरूरत है।

वर्तमान में, मैं इस विधि का उपयोग करता हूं, लेकिन यह ठीक से काम नहीं कर रहा है।

$username = $this->container->get('security.context')->getToken()->getUser(); 
$em = $this->container->get('doctrine')->getEntityManager(); 
$user = $em->getRepository('SiteUtilisateurBundle:Utilisateur')->find($username); 

मैं इसे सही तरीके से कैसे कर सकता हूं?

उत्तर

66

मुझे लगता है कि Ramon सही है। आपके पास पहले से ही उपयोगकर्ता ऑब्जेक्ट है।

इसके अलावा Symfony> 2.1.x में आप नियंत्रक के अंदर

$this->getUser(); 

उपयोग कर सकते हैं।

14

getUser विधि के लिए दस्तावेज़ इंगित करता है:

या तो एक वस्तु जो __toString (लागू करता है) देता है, या एक आदिम स्ट्रिंग दिया जाता है।

और यदि हम FOS\UserBundle\Model\User वर्ग here से अधिक (FOSUserBundle द्वारा इस्तेमाल किया आधार उपयोगकर्ता वर्ग) में देखने के लिए हम देख सकते हैं यह वास्तव में एक __toString विधि है कि:

public function __toString() 
{ 
    return (string) $this->getUsername(); 
} 

मैं वास्तव में लगता है कि आप User ऑब्जेक्ट प्राप्त करें लेकिन क्योंकि यह __toString विधि लागू करता है इसे सीधे टेम्पलेट में प्रस्तुत किया जा सकता है।

टहनी में आप उपयोग कर सकते हैं:

{{ dump(user) }} 

आप वस्तु की किस तरह देखने के लिए। लेकिन आप वास्तव में एक वस्तु का उपयोग कर रहे हैं, एक स्ट्रिंग नहीं।

8

समाधान:

$userManager = $this->container->get('fos_user.user_manager'); 
$user = $userManager->findUserByUsername($this->container->get('security.context') 
        ->getToken() 
        ->getUser()) 
+5

जाहिरा तौर पर यह होता है एक अंतर्निहित विधि getUser के रूप में बिल्कुल वैसा ही() – Sejanus

1

मैं एक ही मुद्दा था, को हल करने के लिए इसे अपने उपयोग के खंड यानी में FOS वर्गों जोड़ें:

use FOS\UserBundle\FOSUserEvents; 
use FOS\UserBundle\Event\GetResponseUserEvent; 
use FOS\UserBundle\Model\UserInterface; 
3

FOSUser 1.3 में आप सीधे $this->getUser में कॉल नहीं कर सकते SecurityController।

आप $this->container->get('security.context')->getToken()->getUser();

कॉल करनी होगी और यह उपयोगकर्ता वस्तु का उपयोग करने के लिए पर्याप्त है। $user = $em->getRepository('SiteUtilisateurBundle:Utilisateur')->find($username);

इसके अलावा अपने find विधि स्वचालित रूप से और परोक्ष स्ट्रिंग के लिए अपने प्रारंभिक $ उपयोगकर्ता नाम वस्तु डाली क्योंकि यह तर्क के रूप में एक वस्तु के लिए इंतजार नहीं करता कॉल करने के लिए कोई ज़रूरत नहीं।

0

FOSUser^1.3 के लिए आप एक नियंत्रक है कि इस तरह BaseController फैली अंदर से वर्तमान उपयोगकर्ता प्राप्त कर सकते हैं:

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