2012-08-04 10 views
7

मैं एक स्थिरता से एक नया उपयोगकर्ता व्यवस्थापक बनाने की कोशिश कर रहा हूं। मैं FOSUserBundle और Symfony2 का उपयोग कर रहा हूँ।डेटाफिक्स्चर और fosuserbundle का उपयोग कर एक व्यवस्थापक उपयोगकर्ता बनाना

[ErrorException]           
Notice: Undefined property:  
INCES\ComedorBundle\DataFixtures\ORM\LoadUserAdminData::$container in 
/public_html/Symfony/src/INCES/ComedorBundle/DataFixtures/ORM/LoadUserAdminData.php line 16 
+0

आप fos का उपयोग क्यों नहीं करते: उपयोगकर्ता: प्रचार करें? –

+0

मैं पहली बार एक व्यवस्थापक उपयोगकर्ता बनाना चाहता हूं जब मैं उत्पादन सर्वर पर अपना आवेदन चलाता हूं। अगर मैं पहले से बनाए गए उपयोगकर्ता के लिए भूमिका को बदलने के लिए कामों को अच्छी तरह से बढ़ावा देता हूं, लेकिन बिल्कुल वही नहीं जो मैं चाहता हूं। –

उत्तर

25

यह (मैं भी FOSUserBundle उपयोग कर रहा हूँ) मेरे लिए काम किया:

// Change the namespace! 
namespace Acme\DemoBundle\DataFixtures\ORM; 

use Doctrine\Common\DataFixtures\FixtureInterface; 
use Doctrine\Common\Persistence\ObjectManager; 
use Symfony\Component\DependencyInjection\ContainerAwareInterface; 
use Symfony\Component\DependencyInjection\ContainerInterface; 

class LoadUserData implements FixtureInterface, ContainerAwareInterface 
{ 
    //.. $container declaration & setter 

    public function load(ObjectManager $manager) 
    { 
     // Get our userManager, you must implement `ContainerAwareInterface` 
     $userManager = $this->container->get('fos_user.user_manager'); 

     // Create our user and set details 
     $user = $userManager->createUser(); 
     $user->setUsername('username'); 
     $user->setEmail('[email protected]'); 
     $user->setPlainPassword('password'); 
     //$user->setPassword('3NCRYPT3D-V3R51ON'); 
     $user->setEnabled(true); 
     $user->setRoles(array('ROLE_ADMIN')); 

     // Update the user 
     $userManager->updateUser($user, true); 
    } 
} 

आशा इस कोई मदद करता है! :)

+0

मेरे लिए भी अपना काम कूल करें :) टीएनएक्स। https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/user_manager.md - यदि उपयोगकर्ता कुछ भिन्न करना चाहता है तो यह उपयोगकर्ता प्रबंधक दस्तावेज़ है :) – Petroff

+0

यह अच्छी तरह से काम करता है। साझा करने के लिए धन्यवाद। +1 – BentCoder

3

दस्तावेज की this अनुभाग का पालन करें:

$userManager = $this->container->get('fos_user.user_manager'); 

//$userAdmin = $userManager->createUser(); 

$userAdmin = new UserAdmin(); 
$userAdmin->setUsername('francis'); 
$userAdmin->setEmail('[email protected]'); 
$userAdmin->setEnabled(true); 
$userAdmin->setRoles(array('ROLE_ADMIN')); 

$userManager->updateUser($userAdmin, true); 

मैं हमेशा इस त्रुटि मिल रही है।

+0

सबसे अच्छा जवाब। धन्यवाद। –

2

त्रुटि इसलिए है क्योंकि $ कंटेनर वर्तमान में अपरिभाषित है। इसे ठीक करने के लिए, अपनी कक्षा परिभाषा में ContainerAwareInterface जोड़ें।

class LoadUserData implements FixtureInterface, ContainerAwareInterface 
{ 
    ... 
} 

यह आपको पूरी तरह से प्राप्त नहीं करेगा, क्योंकि आप UserManager के बिना उपयोगकर्ता बना रहे हैं। इसके बजाय आपको उस लाइन का उपयोग करना चाहिए जिस पर आपने टिप्पणी की है।

ऐसा लगता है कि आपको UserAdmin क्लास की आवश्यकता नहीं है। व्यवस्थापक उपयोगकर्ताओं को केवल उन भूमिकाओं के आधार पर प्रतिष्ठित उपयोगकर्ता का उप-समूह होना चाहिए।

आपको उपयोगकर्ता बनाने के लिए UserManager का उपयोग करना चाहिए (UserAdmin नहीं) और भूमिकाएं सेट करें। यदि आपको सभी व्यवस्थापक उपयोगकर्ताओं की अनुक्रमणिका रखने की आवश्यकता है, तो एक MySQL VIEW इसे पूरा कर सकता है, या आप अपनी खुद की कस्टम "कैश" तालिका बना सकते हैं और आवश्यकता होने पर इसे अपडेट करने के लिए सिद्धांत श्रोताओं का उपयोग कर सकते हैं।

यह प्रश्न काफी पुराना है, इसलिए मुझे लगता है कि आपको उत्तर या कम से कम एक कामकाज मिल रहा है। क्या आप इसे प्रदान करेंगे? अपने प्रश्नों का उत्तर देना ठीक है।

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

  • कोई संबंधित समस्या नहीं^_^