找不到任何要加载的夹具服务
Could not find any fixture services to load
我知道这个问题已经被问过很多次了:
- Symfony 3.4.0 Could not find any fixture services to load
- Could not find any fixture services to load - Symfony 3.2
None 以上实际上帮助了我。也就是说,这是我的配置:
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).
这个 bundle 在 VendorName/BundleName/DataFixtures/ORM 中有一些 Fixture,所有 fixture 都有以下声明:
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']
但不幸的是它一直报错。知道我做错了什么吗?很久以前,可以通过 fixture 命令手动指定要查找的包,但现在不可能了
更新 1:
不好意思大家忘了指出错误信息:"Could not find any fixture services to load"
对于登陆这里的每个人我都解决了我的问题,我可以告诉你的是:
- 仔细检查您是否在 AppKernel 中启用了 Bundle
- 使用命令 php bin/console cache:clear --env=dev(或 env=prod)
清除您的 symfony 缓存
- 手动删除缓存文件夹
帮助我指明了正确的方向来完成这项工作。虽然缓存确实可能是个问题,但在您自己的捆绑包中拥有 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
环境变量)。
我知道这个问题已经被问过很多次了:
- Symfony 3.4.0 Could not find any fixture services to load
- Could not find any fixture services to load - Symfony 3.2
None 以上实际上帮助了我。也就是说,这是我的配置:
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).
这个 bundle 在 VendorName/BundleName/DataFixtures/ORM 中有一些 Fixture,所有 fixture 都有以下声明:
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']
但不幸的是它一直报错。知道我做错了什么吗?很久以前,可以通过 fixture 命令手动指定要查找的包,但现在不可能了
更新 1: 不好意思大家忘了指出错误信息:"Could not find any fixture services to load"
对于登陆这里的每个人我都解决了我的问题,我可以告诉你的是:
- 仔细检查您是否在 AppKernel 中启用了 Bundle
- 使用命令 php bin/console cache:clear --env=dev(或 env=prod) 清除您的 symfony 缓存
- 手动删除缓存文件夹
使用 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
环境变量)。