Symfony 3 的 Doctrine Fixtures 的多个文件

里卡德·埃斯皮纳斯·洛维特

我正在使用捆绑 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Symfony 2.8 Doctrine Fixtures

Symfony2在Doctrine Fixtures中执行SQL文件

Symfony & Doctrine MappedSuperClass - Fixtures Fail

Symfony3 / Doctrine-多个文件上传

Symfony/Doctrine:选择多个表

PHP Symfony Fixtures & Faker

Symfony Doctrine 3 表之间的关系

Symfony 3:Doctrine:schema:update返回ConnexionException

Symfony 3: Doctrine dateTime 问题行

Symfone“ doctrine:fixtures:load”命令丢失

我错过了什么 - Symfony 3 Doctrine Entity ManyToMany?

CKEditor 转换回文本 Symfony 3 和 Doctrine ORM

如何在Symfony 3 / Doctrine中重命名表?

从 Doctrine 实体 (Symfony3) 中获取所有值

Symfony2 Doctrine从CLI中的文件运行SQL

Symfony:Doctrine Data Fixture:如何处理大型的csv文件?

Symfony Doctrine 实体概述

Doctrine/Symfony - 继承 - 关系

Symfony - Redis 和 Doctrine

Symfony、Doctrine 和 createNativeQuery

在Heroku中运行doctrine:fixtures:load时出错

Symfony3:如何以正确的方式启用 PDO/Doctrine 缓存适配器?

如何在“ json_array”类型的列上使用Doctrine在Symfony 3中添加复合索引?

Symfony 2.7 / 3-原则:您请求的服务不存在“ fos_user.doctrine_registry”

一对多的属性,具有Symfony 3 / Doctrine形式的表单

Symfony3 / Doctrine2:使用QueryBuilder与InnerJoin进行子查询

Symfony 3:Doctrine将NULL值存储在数据库中

Symfony3,缺少Doctrine \ ORM \ EntityRepository :: __ construct()的参数1,如何以及为什么

在Symfony3中覆盖Doctrine2类型