php - 找不到任何要加载的固定装置服务

标签 php symfony doctrine symfony-3.4

我知道这个问题已经被问过多次:

  1. Symfony 3.4 and Fixtures Bundle issue with bundle version 3.0
  2. Symfony 3.4.0 Could not find any fixture services to load
  3. Symfony Doctrine can't find fixtures to load
  4. Could not find any fixture services to load - 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 ,该 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{
    ...
}

此 bundle 内有一个 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: 抱歉,大家忘记指出错误消息:“找不到任何要加载的固定服务”

最佳答案

accepted answer帮助我指明了正确的方向,让这项工作顺利进行。虽然缓存确实可能是一个问题,但在您自己的包中包含 Fixture 确实需要您注册它们。

使用 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 环境变量)。

关于php - 找不到任何要加载的固定装置服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50984433/

相关文章:

php - JMSSerializer + 表单/数组

symfony - 我如何在 Sonata Admin 中为一个实体设置 2 个管理员?

mysql - 在 Doctrine QueryBuilder 中从 MySQL DATETIME 中检索日期

带有级联下拉菜单的 PHP Mysql 提交表单

php - PHP 在这里分配 NULL 可以吗?

PHP MySQL 查询不起作用,但可以从终端运行

symfony - 在 Symfony 应用程序/控制台中启用 Doctrine DBAL 命令

php - Symfony 2.6/Doctrine ORMException : The EntityManager is closed

php - 使用结果缓存和不使用结果缓存来计时我的 php 函数

php - JSON.parse 在 Chrome 中不起作用