1
我想知道有關Symfony2的DataFixtures的最佳實踐。例如,我有Role
和User
。Doctrine DataFixtures應該與自定義包中的邏輯隔離嗎?
RoleFixtures:
class RoleFixtures extends AbstractFixture implements OrderedFixtureInterface, ContainerAwareInterface
{
private $container;
public function setContainer(ContainerInterface $container = null)
{
$this->container = $container;
}
public function load(ObjectManager $manager)
{
$userRole = new Role();
$userRole->setName("user");
$userRole->setRole("ROLE_USER");
$manager->persist($userRole);
$manager->flush();
$adminRole = new Role();
$adminRole->setName("admin");
$adminRole->setRole("ROLE_ADMIN");
$manager->persist($adminRole);
$manager->flush();
}
public function getOrder()
{
return 1;
}
UserFixtures:
class UserFixtures extends AbstractFixture implements OrderedFixtureInterface, ContainerAwareInterface
{
private $container;
public function setContainer(ContainerInterface $container = null)
{
$this->container = $container;
}
public function load(ObjectManager $manager)
{
$roleManager = $this->container->get('elite_fifa.role_manager');
$userRole = $roleManager->getRoleByName("user");
$adminRole = $roleManager->getRoleByName("admin");
$userManager = $this->container->get('elite_fifa.user_manager');
$user1 = $userManager->createUser();
$user1->setUsername("user1");
$user1->setEmail("[email protected]");
$user1->addRole($userRole);
$encoder = $this->container->get('security.encoder_factory')->getEncoder($user1);
$encodedPass = $encoder->encodePassword('pass1', $user1->getSalt());
$user1->setPassword($encodedPass);
$manager->persist($user1);
$manager->flush();
$user2 = $userManager->createUser();
$user2->setUsername("user2");
$user2->setEmail("[email protected]");
$user2->addRole($adminRole);
$encoder = $this->container->get('security.encoder_factory')->getEncoder($user2);
$encodedPass = $encoder->encodePassword('pass2', $user1->getSalt());
$user2->setPassword($encodedPass);
$manager->persist($user2);
$manager->flush();
}
public function getOrder()
{
return 2;
}
}
看看在UserFixtures負載的方法,我可以用$roleManager->getRoleByName("user")
而不是使用內置的references
DataFixtures的?
我正在考慮按照我的方式,我正在重複使用代碼並添加另一個路徑來測試。但是,將固定裝置與捆綁邏輯結合起來不好嗎?謝謝
你能詳細闡述一下爲什麼你不使用內建的'references'功能嗎?通過添加另一條路徑來測試你的意思是什麼? – nifr