不幸的是,--fixtures 选项已在 DoctrineFixturesBundle 3.0 中删除,该问题即将通过使用“sets”的不同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();
}
然后你应该为每个环境(prod、test、dev)扩展这个抽象的 Fixture 类,如下所示(示例仅适用于 prod):
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 目录中。
使用此设置,每次运行带有--env 选项的doctrine:fixtures:load 命令时,所有Fixture 类都会初始加载(AbstractFixture 类除外),但只有在getEnvironments() 中设置了相应环境的Fixture 类才会真正执行.