2013-06-27 23 views
5

Próbuję załadować niektórych użytkowników do mojej bazy danych do testowania za pomocą DoctrineFixturesBundle. Zrobiłem dużo wyszukiwania tutaj na StackOverflow i znalazłem dużo o innych kwestiach. Wydaje się jednak, że żadna z nich nie ma mojej odpowiedzi. Wczytuję użytkowników za pomocą Menedżera użytkownika FOS. Poniżej znajduje się moja klasa urządzeń.FOSUserBundle Nie ustawienie soli w DoctrineFikstures

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; 
    } 
} 

Jednak po uruchomieniu urządzeń pojawia się błąd, który mówi, że sól nie jest ustawiona. Czy ktoś może pomóc?

+0

Sól zostaje ustawiona w konstruktorze abstrakcyjnego 'FOS \ UserBundle \ Model \ User'. Czy rozszerzasz tę klasę, ale nie wywołujesz jej konstruktora w twojej konkretnej klasie? – Ryan

Odpowiedz

8

Zgadywanie, czy masz konstruktora w swojej klasie użytkownika? Ponieważ sól jest ustawiona w konstruktorze podstawowej klasy użytkownika.

// 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; 
} 

Jeśli masz swój własny konstruktor nie zapomnij, aby wywołać konstruktor rodzica z parent::__construct() aby uzyskać jego pracy. Zobacz także w FOSUserBundle docs, gdzie wspomniano o wywołaniu do konstruktora macierzystego.

Z PHP docs: Parent konstruktorów nie nazywa się niejawnie jeśli klasa dziecka definiuje konstruktor. Aby uruchomić konstruktor macierzysty, wymagane jest wywołanie parent :: __ construct() w konstruktorze potomnym. Jeśli dziecko nie definiuje konstruktora, może być odziedziczone z klasy nadrzędnej, tak jak metoda z normalną klasą (jeśli nie została zadeklarowana jako prywatna).

+0

Dziękuję bardzo! Byłeś martwy. Wprowadziłem jeden z moich atrybutów do nowej ArrayCollection w moim konstruktorze. Wprowadziłem tę zmianę ostatnio, co wyjaśnia, dlaczego ostatnio dostałem ten błąd! – searsaw

Powiązane problemy