2011-09-18 9 views
80

में मैं FOSuserbundle उपयोग कर रहा हूँ उपयोगकर्ता पंजीकरण https://github.com/FriendsOfSymfony/FOSUserBundleएक्सेस करना लॉग इन हुए प्रयोक्ता एक टेम्पलेट

मैं गया यह/दर्ज की गया है अंदर और बाहर प्रवेश करने के साथ आरंभ करने के लिए। मैं अब क्या करना चाहता हूं उपयोगकर्ताओं के डेटा में लॉग इन करें और इसे मेरी साइट के प्रत्येक पृष्ठ पर प्रस्तुत करें। शीर्षलेख प्रकार में "हाय उपयोगकर्ता नाम" की तरह।

यह मेरी एप्लिकेशन/संसाधन/विचारों/base.html.twig में एक नियंत्रक embedding की तरह लगता है इस http://symfony.com/doc/current/book/templating.html#embedding-controllers

तो मैं उपयोगकर्ता प्रोफ़ाइल डेटा का उपयोग करने के लिए अपने नियंत्रक लिखा करने का सबसे अच्छा तरीका है। मैं यह नहीं समझ सकता कि मेरे एम्बेडेड नियंत्रक में एफओएस विधियों का उपयोग कैसे किया जाए। तो मेरी एक्मे/UserBundle/नियंत्रक/UserController.php मैं ऐसा करना चाहते हैं:

public function showAction() 
{ 
    $user = $this->container->get('security.context')->getToken()->getUser(); 
    if (!is_object($user) || !$user instanceof UserInterface) { 
     throw new AccessDeniedException(
       'This user does not have access to this section.'); 
    } 

    return $this->container->get('templating') 
     ->renderResponse('FOSUserBundle:Profile:show.html.'.$this->container 
     ->getParameter('fos_user.template.engine'), array('user' => $user)); 
} 

जो मैं से पकड़ा: विक्रेता/बंडलों/FOS/UserBundle/नियंत्रक/ProfileController.php

उत्तर

205

आप नियंत्रक में कुछ भी अनुरोध किए बिना सीधे टॉग टेम्पलेट में उपयोगकर्ता डेटा तक पहुंच सकते हैं। उपयोगकर्ता इस तरह सुलभ है: app.user

अब, आप उपयोगकर्ता की हर संपत्ति तक पहुंच सकते हैं। उदाहरण के लिए, आप उपयोगकर्ता नाम का उपयोग कर सकते हैं: app.user.username

चेतावनी, यदि उपयोगकर्ता लॉग नहीं है, तो app.user शून्य है।

यदि आप यह जांचना चाहते हैं कि उपयोगकर्ता लॉग है या नहीं, तो आप is_granted ट्विग फ़ंक्शन का उपयोग कर सकते हैं। उदाहरण के लिए, यदि आप यह जांचना चाहते हैं कि उपयोगकर्ता के पास ROLE_ADMIN है, तो आपको बस is_granted("ROLE_ADMIN") करना होगा।

तो, अपने पृष्ठों के हर में आप कर सकते हैं:

{% if is_granted("ROLE") %} 
    Hi {{ app.user.username }} 
{% endif %} 
+7

धन्यवाद। मैंने वास्तव में "IS_AUTHENTICATED_REMEMBERED" के लिए "ROLE" बदल दिया और यह बहुत अच्छा काम किया। – ed209

+5

मैं FOSuserbundle का उपयोग नहीं कर रहा हूं (जब तक यह अब नहीं आता है) लेकिन 'app.user.username' अभी भी मेरे लिए काम करता है। किसी के लिए जानना उपयोगी हो सकता है। –

+0

धन्यवाद! यह दस्तावेज़ीकरण में बहुत स्पष्ट होना चाहिए। –

12

सिम्फोनी 2.6 के लिए और ऊपर हम टहनी टेम्पलेट के लिए

{{ app.user.getFirstname() }} 

रूप app.security वैश्विक चर का उपयोग कर सकते हैं को हटा दिया गया है और 3.0

से अधिक जानकारी हटा दी जाएगी:

http://symfony.com/blog/new-in-symfony-2-6-security-component-improvements

और देखो

http://symfony.com/doc/current/reference/twig_reference.html

+4

अनावश्यक विधि कॉल के संबंध। आप इस तरह गतिशील विशेषताओं का उपयोग कर सकते हैं '{{app.user.firstname}}'। इसे और अधिक सामने के अंत-देव के अनुकूल है मुझे लगता है कि है। – kacper3w

+2

हालांकि मैं के बारे में अनावश्यक जा रहा है ऊपर टिप्पणी से सहमत हैं, मैं वोट दें करने जा रहा हूँ यह है क्योंकि यह दर्शाता है कि कस्टम तरीकों यदि ऐसा है तो – Simon

-1
{{ app.user.username|default('') }}

उदाहरण के लिए बस वर्तमान लॉगिन उपयोगकर्ता नाम, फिल्टर समारोह डिफ़ॉल्ट ('') में वैश्विक चर अच्छा है जब उपयोगकर्ता द्वारा प्रवेश नहीं है होना चाहिए बस कष्टप्रद त्रुटि संदेश से बचें।

+2

वांछित इस्तेमाल किया जा सकता है और कैसे यह समस्या को हल करता है? शायद आप स्पष्टीकरण जोड़ने की जरूरत –