2013-06-27 27 views
5

我試圖加載一些用戶到我的數據庫進行測試使用DoctrineFixturesBundle。我在StackOverflow上做了很多搜索,並且發現了很多其他的問題。但似乎沒有我的答案。我正在使用FOS用戶管理器加載用戶。以下是我的夾具課。FOSUserBundle Not Setting Salt In 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

salt在抽象'FOS \ UserBundle \ Model \ User'的構造函數中設置。你在擴展那個類,但是不在你的具體類中調用它的構造函數嗎? – Ryan

回答

8

猜測你的用戶類中有一個構造函數?因爲salt是在基類User類的構造函數中設置的。

// 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:父構造則不會暗中調用如果子類定義構造函數。爲了運行父構造函數,需要在子構造函數中調用parent :: __ construct()。如果孩子沒有定義一個構造函數,那麼它可能像父類一樣繼承父類(如果它沒有被聲明爲私有的)。

+0

非常感謝你!你死了。我在我的構造函數中創建了一個新的ArrayCollection屬性。我最近做了這個改變,這解釋了爲什麼我最近得到了這個錯誤! – searsaw