2013-06-27 4 views
5

मैं कुछ उपयोगकर्ताओं को DoctrineFixturesBundle का उपयोग करके परीक्षण के लिए अपने डेटाबेस में लोड करने का प्रयास कर रहा हूं। मैंने स्टैक ओवरफ्लो पर यहां बहुत कुछ खोजा है और मुझे अन्य मुद्दों के बारे में बहुत कुछ मिला है। ऐसा लगता है कि मेरे पास कोई जवाब नहीं है। मैं अपने उपयोगकर्ताओं को एफओएस उपयोगकर्ता प्रबंधक का उपयोग करने में लोड कर रहा हूं। नीचे मेरी स्थिरता वर्ग है।FOSUserBundle DoctrineFixtures में नमक सेट नहीं कर रहा है

namespace Kandidly\UserBundle\DataFixtures; 

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

class LoadUserData extends AbstractFixture implements OrderedFixtureInterface, ContainerAwareInterface 
{ 
    private $container; 

    /** 
    * {@inheritDoc} 
    */ 
    public function load(ObjectManager $manager) 
    { 
     $userManager = $this->container->get('fos_user.user_manager'); 

     $user1 = $userManager->createUser(); 
     $user1->setFirstName('Admin'); 
     $user1->setLastName('User'); 
     $user1->setCity('Somewhere'); 
     $user1->setState('TN'); 
     $user1->setUsername('admin'); 
     $user1->setEmail('[email protected]'); 
     $user1->setPlainPassword('admin'); 
     $user1->setEnabled(true); 
     $user1->setRoles(
      array(
       'ROLE_ADMIN' 
      ) 
     ); 

     $user2 = $userManager->createUser(); 
     $user2->setFirstName('Normal'); 
     $user2->setLastName('User'); 
     $user2->setCity('Another'); 
     $user2->setState('CA'); 
     $user2->setUsername('user'); 
     $user2->setEmail('[email protected]'); 
     $user2->setPlainPassword('user'); 
     $user2->setEnabled(true); 
     $user2->setRoles(
      array(
       'ROLE_USER' 
      ) 
     ); 

     $userManager->updateUser($user1); 
     $userManager->updateUser($user2); 

     $this->addReference('admin-user', $user1); 
    } 

    /** 
    * Get the order of this fixture 
    * 
    * @return integer 
    */ 
    function getOrder() 
    { 
     return 1; 
    } 

    /** 
    * Sets the Container. 
    * 
    * @param ContainerInterface|null $container A ContainerInterface instance or null 
    * 
    * @api 
    */ 
    public function setContainer(ContainerInterface $container = null) 
    { 
     $this->container = $container; 
    } 
} 

हालांकि, जब मैं फिक्स्चर चलाता हूं, मुझे एक त्रुटि मिलती है जो कहता है कि नमक सेट नहीं किया जा रहा है। क्या कोई मदद कर सकता है?

+0

नमक अमूर्त 'FOS \ UserBundle \ Model \ User' के निर्माता में सेट हो जाता है। क्या आप उस वर्ग को विस्तारित कर रहे हैं लेकिन अपने कन्स्ट्रक्टर में अपने कन्स्ट्रक्टर को नहीं बुला रहे हैं? – Ryan

उत्तर

8

अनुमान है कि आपके उपयोगकर्ता वर्ग में कोई कन्स्ट्रक्टर है? क्योंकि नमक आधार उपयोगकर्ता वर्ग के निर्माता में सेट किया गया है।

// FOS\UserBundle\Model\User 

public function __construct() 
{ 
    $this->salt = base_convert(sha1(uniqid(mt_rand(), true)), 16, 36); 
    $this->enabled = false; 
    $this->locked = false; 
    $this->expired = false; 
    $this->roles = array(); 
    $this->credentialsExpired = false; 
} 

आप अपने खुद के निर्माता मत भूलना यह काम कर पाने के parent::__construct() साथ माता पिता निर्माता कॉल करने के लिए है। FOSUserBundle docs में भी देखें, जहां अभिभावक कन्स्ट्रक्टर को कॉल का उल्लेख किया गया है।

PHP docs: जनक कंस्ट्रक्टर्स से कहा जाता है नहीं कर रहे हैं परोक्ष अगर बच्चे कक्षा एक निर्माता परिभाषित करता है। अभिभावक कन्स्ट्रक्टर चलाने के लिए, बाल कन्स्ट्रक्टर के भीतर माता-पिता :: __ निर्माण() के लिए एक कॉल आवश्यक है। यदि बच्चा एक कन्स्ट्रक्टर को परिभाषित नहीं करता है तो इसे सामान्य वर्ग विधि (यदि इसे निजी के रूप में घोषित नहीं किया गया था) की तरह मूल वर्ग से विरासत में प्राप्त किया जा सकता है।

+0

आपको बहुत बहुत धन्यवाद! तुम मर गए थे मैं अपने गुणकों में से एक को अपने कन्स्ट्रक्टर में एक नया ऐरेकोलेक्शन बना रहा था। मैंने हाल ही में यह बदलाव किया है जो बताता है कि मुझे हाल ही में यह त्रुटि क्यों मिली! – searsaw

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