К сожалению, опция --fixtures
была удалена в DoctrineFixturesBundle 3.0, проблема собирается быть решена с помощью другого подхода с использованием «наборов».Похоже, что решение было реализовано, но еще не объединено в мастере 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 с помощью своего класса для каждой среды (prod, test, dev) вот так (пример показан только для 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.
При такой настройке каждый раз, когда вы запускаете команду doctrine:fixtures:load
с параметром --env
, все классы Fixture будут изначально загружаться (кроме класса AbstractFixture) bно только классы Fixture с соответствующей средой, установленной в getEnvironments (), будут действительно выполнены.