2013-06-27 21 views
5

Tôi đang cố gắng tải một số người dùng vào cơ sở dữ liệu của mình để thử nghiệm bằng DoctrineFixturesBundle. Tôi đã thực hiện rất nhiều tìm kiếm ở đây trên StackOverflow và đã tìm thấy rất nhiều về các vấn đề khác. Dường như không có câu trả lời của tôi. Tôi đang tải người dùng của mình bằng cách sử dụng Trình quản lý người dùng FOS. Dưới đây là lớp cố định của tôi.FOSUserBundle Không đặt muối trong 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('use[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; 
    } 
} 

Tuy nhiên, khi tôi chạy các đồ đạc, tôi gặp lỗi nói rằng muối chưa được đặt. Có ai giúp được không?

+0

Muối được đặt trong hàm tạo của phần tử trừu tượng 'FOS \ UserBundle \ Model \ User'. Bạn có đang mở rộng lớp đó nhưng không gọi hàm tạo của nó trong lớp bê tông của bạn không? – Ryan

Trả lời

8

Đoán bạn có một hàm tạo trong lớp người dùng của bạn? Bởi vì muối được đặt trong hàm tạo của lớp người dùng cơ sở.

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

Nếu bạn có nhà xây dựng của riêng bạn đừng quên gọi nhà xây dựng cha mẹ với parent::__construct() để làm việc đó. Xem thêm trong số FOSUserBundle docs, trong đó cuộc gọi đến hàm tạo cha được đề cập.

Từ PHP docs: constructors Chánh không được gọi ngầm nếu lớp con định nghĩa một constructor. Để chạy một hàm tạo cha, một lời gọi tới parent :: __ construct() bên trong hàm tạo con là bắt buộc. Nếu đứa trẻ không định nghĩa một hàm tạo thì nó có thể được kế thừa từ lớp cha giống như một phương thức lớp bình thường (nếu nó không được khai báo là riêng tư).

+0

Cảm ơn bạn rất nhiều! Bạn đã chết trên. Tôi đã làm cho một trong những thuộc tính của tôi một ArrayCollection mới trong hàm tạo của tôi. Tôi đã thực hiện thay đổi gần đây, giải thích tại sao tôi gặp lỗi này gần đây! – searsaw

Các vấn đề liên quan