嗨,我有一个关于使用dataFixtures的问题,我想将Fixture用于环境生产,开发,测试。我尝试使用--fixtures
选项,但找不到此选项。 如何在命令行上用我想要的文件加载我的灯具?
是否可以使用doctrine:fixtures:load
命令的--env
选项来执行此操作?
我有固定装置
- 应用程序/数据夹具/产品
- 应用/数据夹具/开发
- 应用程序/数据夹具/测试
我正在使用symfony 3.4 谢谢你的帮助
不幸的是,--fixtures
选项已在 DoctrineFixturesBundle 3.0 中删除,该问题即将通过使用"集合"的不同方法解决。该解决方案似乎已经实现,但尚未合并到DoctrineFixturesBundle主控中。
我当时建议耐心等待。
编辑:如何使用环境来克服这个问题:
正如您的评论中所问的,您确实可以使用env选项来克服此问题,如下所示:
首先,您应该创建一个抽象的 Fixture 类,该类应该位于 DataFixtures 目录中,并注入容器,以便您可以从内核获取当前环境:
namespace AppDataFixtures;
use DoctrineCommonDataFixturesFixtureInterface;
use DoctrineCommonPersistenceObjectManager;
use SymfonyComponentDependencyInjectionContainerAwareInterface;
use SymfonyComponentDependencyInjectionContainerInterface;
abstract class AbstractFixture implements ContainerAwareInterface, FixtureInterface
{
protected $container;
public function setContainer(ContainerInterface $container = null)
{
$this->container = $container;
}
public function load(ObjectManager $manager)
{
$kernel = $this->container->get('kernel');
if (in_array($kernel->getEnvironment(), $this->getEnvironments())) {
$this->doLoad($manager);
}
}
abstract protected function doLoad(ObjectManager $manager);
abstract protected function getEnvironments();
}
然后,您应该扩展这个抽象的 Fixture 类,为每个环境(生产、测试、开发(提供一个类,如下所示(示例仅针对 prod 显示(:
namespace AppDataFixtures;
use DoctrineCommonPersistenceObjectManager;
class ProdFixture extends AbstractFixture
{
protected function doLoad(ObjectManager $manager)
{
// load what you need to load for prod environment
}
protected function getEnvironments()
{
return ['prod'];
}
}
这些ProdFixture
、TestFixture
、DevFixture
等.class也应该存在于您的 DataFixtures 目录中。
使用此设置,每次使用--env
选项运行doctrine:fixtures:load
命令时,所有 Fixture 类最初都将加载(AbstractFixture 类除外(,但只有在 getEnvironments(( 中设置了相应环境的 Fixture 类才会真正执行。
>Symfony在夹具包中引入了"组"的概念。例如,您现在可以按环境对灯具进行分组。
https://symfony.com/blog/new-in-fixturesbundle-group-your-fixtures