Невозможно загрузить фикстуры в Symfony 3.4

Я использую DoctrineFixturesBundle. Согласно документации, любой класс, расширяющий Fixture, будет автоматически подключен вверх, чтобы консоль знала, как с этим справиться. Однако, несмотря на то, что мой класс фикстур расширяется Fixture (код ниже), я продолжаю получать следующую ошибку:

Не удалось найти службы фикстуры для загрузки.

Если я попытаюсь подключить службу вручную в моем services.yml файле с помощью:

services:
    AppBundle\DataFixtures\:
        resource: '../../src/AppBundle/DataFixtures/'
        tags: ['doctrine.fixture.orm']

Вместо этого я получаю:

В строке 168 FileLoader.php:

Файл "../../src/AppBundle/DataFixtures" не существует (в: / path / to / project / app / config) в /path/to/project/app/config/services.yml (который является импортируется из "/path/to/project/app/config/config.yml").

В строке 71 FileLocator.php:

Файл "../../src/AppBundle/DataFixtures" не существует (в: / path / to / project / app / config).

Путь к моим фикстурам данных - /path/to/project/src/DataFixtures. Фактический файл класса (AppFixtures.php):

namespace AppBundle\DataFixtures;

use AppBundle\Entity\Category;
use AppBundle\Entity\Product;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\Persistence\ObjectManager;

class AppFixtures extends Fixture
{
    public function load(ObjectManager $em)
    {
        $category = new Category();

        $category->setName("Test Category")
            ->setSlug()
            ->setDescription("This is only for test purposes");

        $fabricProduct = new Product();

        $fabricProduct->setName("Test OldProduct")
            ->setCanonicalPrice(2.45)
            ->setHasSale(false)
            ->setCategory($category)
            ->setSlug()
            ->setNumberInStock(45.25);

        $em->persist($category);
        $em->persist($fabricProduct);
        $em->flush();
    }
}

Чтобы заранее ответить на очевидные вопросы, да, пакет зарегистрирован правильно. И мой services.yml файл имеет автоматическое подключение по умолчанию:

services:
    # default configuration for services in *this* file
    _defaults:
        # automatically injects dependencies in your services
        autowire: true
        # automatically registers your services as commands, event subscribers, etc.
        autoconfigure: true
        # this means you cannot fetch services directly from the container via $container->get()
        # if you need to do this, you can override this setting on individual services
        public: false

Есть идеи о том, что я делаю неправильно? Согласно всей документации, которую я нашел, это должно работать.


person Major Productions    schedule 15.02.2018    source источник


Ответы (1)


Решил ... с учетом того, как в Symfony работает сервисное соединение по умолчанию, он ожидает, что все будет в каталоге src/AppBundle. Мои фикстуры находились в каталоге за пределами этого (но, очевидно, все еще в каталоге проекта). Перемещение моей директории фикстур в дочернюю для src/AppBundle исправило это.

person Major Productions    schedule 15.02.2018