嗨,我对使用dataFixtures有疑问,我想将夹具用于环境prod,dev,test。我尝试使用--fixtures
选项,但找不到该选项。
如何在命令行中将所需的文件加载到我的灯具中?
是否可以使用--env
命令的doctrine:fixtures:load
选项来做到这一点?
我有固定装置
我正在使用symfony 3.4 谢谢您的帮助
答案 0 :(得分:1)
不幸的是,在DoctrineFixturesBundle 3.0中,--fixtures
选项已被删除,该问题将通过使用不同的approach使用“集合”来解决。该解决方案似乎已经实施,但尚未与DoctrineFixturesBundle主版本合并。
那时候我要耐心点。
编辑:如何使用环境解决此问题:
正如您的评论中所述,您确实可以使用env选项来克服此问题,如下所示:
首先,您应该创建一个抽象的Fixture类,该类应该位于DataFixtures目录中,并注入容器,以便您可以从内核获取当前环境:
namespace App\DataFixtures;
use Doctrine\Common\DataFixtures\FixtureInterface;
use Doctrine\Common\Persistence\ObjectManager;
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
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类,并添加一个类(仅针对产品显示示例):
namespace App\DataFixtures;
use Doctrine\Common\Persistence\ObjectManager;
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
等类也应位于您的DataFixtures目录中。
使用此设置,每次您使用doctrine:fixtures:load
选项运行--env
命令时,将首先加载所有Fixture类(AbstractFixture类除外),但是只有在getEnvironments( )会真正执行。
答案 1 :(得分:0)
Symfony在灯具组合中引入了“组”的概念。例如,您现在可以按环境对设备进行分组。
https://symfony.com/blog/new-in-fixturesbundle-group-your-fixtures