2013-06-27 20 views
5

Sto provando a caricare alcuni utenti nel mio database per testare con DoctrineFixturesBundle. Ho fatto un sacco di ricerche qui su StackOverflow e ho trovato molte altre cose. Nessuno sembra avere la mia risposta però. Sto caricando i miei utenti usando il Gestore utenti FOS. Di seguito è la mia classe di apparecchio.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; 
    } 
} 

Tuttavia, quando eseguo i proiettori, viene visualizzato un errore che indica che il sale non viene impostato. Qualcuno può aiutare?

+0

Il sale viene impostato nel costruttore del 'FOS \ UserBundle \ Model \ User' astratto. Stai estendendo quella classe ma non chiama il suo costruttore nella tua classe concreta? – Ryan

risposta

8

Supponendo di avere un costruttore nella classe utente? Perché il sale è impostato nel costruttore della classe Utente di base.

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

Se avete il proprio costruttore di non dimenticare di chiamare il costruttore genitore con parent::__construct() per farlo funzionare. Vedi anche nello FOSUserBundle docs, dove viene menzionata la chiamata al costruttore genitore.

Dalle PHP docs: costruttori Capogruppo non sono chiamati implicitamente se la classe figlia definisce un costruttore. Per eseguire un costruttore genitore, è richiesta una chiamata a parent :: __ construct() all'interno del costruttore figlio. Se il figlio non definisce un costruttore, può essere ereditato dalla classe padre proprio come un normale metodo di classe (se non è stato dichiarato come privato).

+0

Grazie mille! Eri morto. Stavo trasformando uno dei miei attributi in una nuova ArrayCollection nel mio costruttore. Di recente ho apportato questa modifica che spiega perché ho ricevuto questo errore di recente! – searsaw

Problemi correlati