2013-06-27 3 views
5

DoctrineFixturesBundleを使用してテストするために、一部のユーザーをデータベースにロードしようとしています。私はここでStackOverflowで多くの検索を行い、他の問題について多くを見つけました。しかし、私の答えはありません。 FOS User Managerを使用しているユーザーを読み込んでいます。以下は私のフィクスチャクラスです。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

あなたのユーザークラスにコンストラクタがあると思いますか? 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

ありがとう!あなたは死んでいた。私は私の属性の1つを私のコンストラクタの新しいArrayCollectionにしていました。私は最近この変更を加え、なぜこのエラーが最近発生したのかを説明します。 – searsaw

関連する問題