根据Symfony 3中的配置加载不同的数据装置

根据Symfony 3中的配置加载不同的数据装置,symfony,symfony-3.3,Symfony,Symfony 3.3,目前,我们正在为一些在线商店(以及未来可能的新商店)开发一套微服务。出于商业原因,我们将对同一个软件有不同的实现,因此每个商店都会要求自己的一个 我需要根据实现在数据库上设置不同的初始数据包,这意味着每个包都有不同的数据装置 我正在寻找一种根据配置参数(公司名称、公司名称…)加载适当夹具的好方法。最好的方法是什么?如果您使用的是条令/条令装置捆绑包您可以在文件params.yml中使用params,然后在容器的加载函数中获取它。像这样的 //parameters.yml parameters

目前,我们正在为一些在线商店(以及未来可能的新商店)开发一套微服务。出于商业原因,我们将对同一个软件有不同的实现,因此每个商店都会要求自己的一个

我需要根据实现在数据库上设置不同的初始数据包,这意味着每个包都有不同的数据装置


我正在寻找一种根据配置参数(公司名称、公司名称…)加载适当夹具的好方法。最好的方法是什么?

如果您使用的是
条令/条令装置捆绑包
您可以在文件
params.yml
中使用params,然后在容器的加载函数中获取它。像这样的

//parameters.yml
parameters
     config: "Cloud" //it can be anyelse
在fixturesLoad文件中

public function setContainer(ContainerInterface $container = null)
{
    var_dump('getting container here');
    $this->container = $container;
}

/**
 * {@inheritDoc}
 */
public function load(ObjectManager $manager)
{
    $config = $this->container->getParameter('config'); //"Cloud"
    if($config == "Cloud"){
         //Do something
    }else{
         //Do something else
    }
}

在我看来,这是一种更好的方法,因为
parameters.yml
在执行过程中不断变化,您只需要在每个环境中对其进行更改。

可以通过将数据存储在自定义参数文件中来完成

使用名为“company_slug”的全局参数作为datafixtures包的键,如下所示:

parameters:
    datafixtures:
        # Company 1 datafixtures
        company1:
            defaultusers:
                0:
                    name: john
                    email: john@company1.lol
                1:
                    name: steve
                    email: steve@company1.lol
        # Company 2 datafixtures
        company2:
            defaultusers:
                0:
                    name: anna
                    email: anna@company2.lol
                1:
                    name: eva
                    email: eva@company2.lol
然后使用以下参数开发数据装置:

public function load(ObjectManager $manager)
{
    $companySlug = $this->container->getParameter('company_slug');
    if (array_key_exists($companySlug, $this->container->getParameter('datafixtures'))) {
        $dataFixtures = $this->container->getParameter('datafixtures')[$companySlug];
    } else {
        throw $this->createException('No datafixtures parameters found for the company slug '.$companySlug);
    }

    foreach ($dataFixtures['defaultusers'] as $u) {
        $user = new User();
        $user->setUserName($u['name']);
        $user->setEmail($u['email']);
        $manager->persist($user);
        $manager->flush();
    }
}

但是,每次我有一个新的实现时,我都必须修改这个文件,而不是仅仅添加一个文件(还有一个superfat fixtures文件),不是吗?