我正在使用捆绑包Doctrine:Fixtures来加载bbdd的示例抛出实体,因为我在项目中单独工作就可以了。
但是现在,我在我的项目中找到了一位同事,我们想知道是否可以为装载设置不同的文件。
我在git中获得了自己的灯具文件,我不想让他修改这个文件。我想为他准备一个特殊文件,只要他想要这个固定装置文件就可以修改。所以,任何人都可以在bbdd的init中拥有自己的拥有记录。
如果多个文件不可能,可以用其他方式吗?
http://symfony.com/doc/current/bundles/DoctrineFixturesBundle/index.html
答案 0 :(得分:1)
您可以使用--fixture
标志加载特定的灯具文件:
php app/console doctrine:fixtures:load --fixture=/src/BundleName/DataFixtures/ORM/Fixture.php
或者,您可以添加一个包含一些工作示例的Fixtures.php.dist
文件,然后使用.gitignore忽略Fixtures.php
。
然后在您的构建(或作曲家脚本)和/或文档中添加一个命令,以便在签出项目时将此.dist
文件复制到Fixtures.php
。
如果您正在进行BDD,另一种方法是创建一个Helper类,可以在Context
中使用,以便在测试中根据需要创建和保留实体。这将允许您仅创建测试所需的细节。它真正需要的只是EntityManager
所以它可能比预先定义所有灯具更简单。
您可以使用Faker生成逼真的实体。
class AbstractFixtureHelper implements ContainerAwareInterface
{
/**
* @var Generator
*/
protected $faker;
/**
* @var ContainerInterface
*/
protected $container;
public function __construct()
{
$this->faker = Factory::create();
}
/**
* @param ContainerInterface|null $container
* @return void
*/
public function setContainer(ContainerInterface $container = null)
{
$this->container = $container;
}
/**
* @return EntityManager
*/
protected function getEntityManager()
{
return $this->container->get('doctrine.orm.entity_manager');
}
}
然后针对不同的实体 - 在此示例中为用户:
class UserFixtureHelper extends AbstractFixtureHelper
{
public function createUser()
{
$user = new User();
$user->setEmail($this->faker->email);
$this->getEntityManager()->persist($user);
$this->getEntityManager()->flush();
return $user;
}
}
然后在您的上下文中,注入UserFixtureHelper
并直接在场景步骤中创建。
/**
* @Given there is a User who XXX
*/
public function thereIsAUser()
{
$user = $this->userFixtureHelper->createUser();
}