我正在使用捆绑 Doctrine:Fixtures 加载 bbdd 抛出实体的示例,因为我在项目中单独工作,所以没问题。
但是现在,我的项目中有一位同事,我们想知道是否可以为加载设置不同的文件。
我在 git 中得到了自己的固定装置文件,我不希望他修改这个文件。我想为他准备一个特殊的文件,这样他就可以在需要这个灯具文件时随时进行修改。因此,任何人都可以在 bbdd 的 init 中拥有自己的记录。
如果无法使用多个文件,是否可以通过其他方式实现?
http://symfony.com/doc/current/bundles/DoctrineFixturesBundle/index.html
您可以使用以下--fixture
标志加载特定的夹具文件:php app/console doctrine:fixtures:load --fixture=/src/BundleName/DataFixtures/ORM/Fixture.php
或者,您可以添加一个Fixtures.php.dist
包含一些工作示例的文件,然后使用 .gitignore 忽略 .gitignore Fixtures.php
。
然后在您的构建(或 Composer 脚本)和/或您的文档中添加一个命令,.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();
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句