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

Я знаю, что этот вопрос задавался уже несколько раз:

  1. Symfony 3.4 и Fixtures Bundle проблема с версией пакета 3.0
  2. Symfony 3.4.0 Не удалось найти ни одной службы фикстуры для загрузки
  3. Symfony Doctrine не может найти приборы для загрузки
  4. Не удалось найти ни одной службы фикстуры для загрузки - Symfony 3.2

Ничто из перечисленного на самом деле не помогло мне. Тем не менее, это моя конфигурация:

Composer.json

"require": {
"php": ">=7.0",
"doctrine/doctrine-bundle": "^1.6",
"doctrine/orm": "^2.5",
....
},
    "require-dev": {
        ....
        "doctrine/doctrine-fixtures-bundle": "^3.0",
}

Я использую разработанный компанией Bundle, который работал до последней версии выше (последняя протестированная и рабочая конфигурация имела PHP 5.6, Doctrine bundle ^1.6,doctrine orm ^2.5, fixture bundle ^3.0).

В этом комплекте есть некоторое Fixture внутри VendorName / BundleName / DataFixtures / ORM, все приборы имеют следующее объявление:

Class MyFixture1 extends Fixture implements OrderedFixtureInterface,FixtureInterface, ContainerAwareInterface{
    ...
}

Внутри этого пакета есть файл services.yml, загруженный так:

public function load(array $configs, ContainerBuilder $container)
{
    $configuration = new Configuration();
    $config = $this->processConfiguration($configuration, $configs);

    $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
    $loader->load('services.yml');
}

VendorName / BundleName / Resources / config / Services.yml Я пробовал разные конфигурации:

services:
_defaults:
  autowire: true
  autoconfigure: true
  public: false

VendorName\BundleName\:
  resource: '../../*'
  # you can exclude directories or files but if a service is unused, it's removed anyway
  exclude: '../../{Entity,Repository,Tests,EventListener}'

Я попытался объяснить поиск внутри DataFixtures:

 VendorName/BundleName\DataFixtures\:
  resource: '../../src/VendorName/BundleName/DataFixtures'
  tags: ['doctrine.fixture.orm']

И даже вручную настроить сервис:

VendorName\BundleName\DataFixtures\ORM\MyFixture1:
  class: VendorName/BundleNamee\DataFixtures\ORM\MyFixture1
  tags: ['doctrine.fixture.orm']

Но, к сожалению, он продолжает давать ошибку. Есть идеи, что я делаю не так? Давным-давно можно было вручную указать команде прибора, какой пакет искать, но теперь это уже невозможно

ОБНОВЛЕНИЕ 1: Извините, ребята, забыли указать сообщение об ошибке: "Не удалось найти ни одной службы фикстуры для загрузки"

1 ответ

Решение

Для всех, кто приземлился здесь, я решил свою проблему, что я могу сказать вам:

  1. Дважды проверьте, что вы включили Bundle в AppKernel
  2. Очистите кэш Symfony с помощью команды php bin/console cache:clear --env=dev (или env=prod)
  3. Вручную удалить папку кеша

Принял ответ помог мне точку в правильном направлении, чтобы получить эту работу. Хотя кеш действительно может быть проблемой, наличие Fixtures в ваших собственных пакетах требует их регистрации.

Используя SF 5.1.*, Я создал services_dev.yaml файл и добавлен в:

services:
  // other config
  Namespace\Registered\In\Composer\For\Fixtures\:
    resource: '../vendor/path/registered/in/composer/to/fixtures'
    tags: ['doctrine.fixture.orm']

Тогда действительно очистите кеш, и он должен работать.

Добавлено *_dev к services.yaml файл, поскольку это способ для Symfony загружать его только тогда, когда вы находитесь в среде разработки (для APP_ENV Переменная среды).

Другие вопросы по тегам