Не удалось найти какие-либо службы фикстуры для загрузки
Я знаю, что этот вопрос задавался уже несколько раз:
- Symfony 3.4 и Fixtures Bundle проблема с версией пакета 3.0
- Symfony 3.4.0 Не удалось найти ни одной службы фикстуры для загрузки
- Symfony Doctrine не может найти приборы для загрузки
- Не удалось найти ни одной службы фикстуры для загрузки - 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 ответ
Для всех, кто приземлился здесь, я решил свою проблему, что я могу сказать вам:
- Дважды проверьте, что вы включили Bundle в AppKernel
- Очистите кэш Symfony с помощью команды php bin/console cache:clear --env=dev (или env=prod)
- Вручную удалить папку кеша
Принял ответ помог мне точку в правильном направлении, чтобы получить эту работу. Хотя кеш действительно может быть проблемой, наличие 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
Переменная среды).