【问题标题】:Could not find any fixture services to load找不到要加载的任何夹具服务
【发布时间】:2018-12-01 17:23:36
【问题描述】:

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

  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,它在上述最后一个版本之前运行良好(最后测试和工作配置为 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: 抱歉,伙计们忘了指出错误消息:“找不到要加载的任何固定装置服务”

【问题讨论】:

  • 您忘记报告显示的错误。
  • 是的,我的错,我把它放在标题中,忘了在正文中重复。错误消息是“找不到要加载的任何夹具服务”

标签: php symfony doctrine symfony-3.4


【解决方案1】:

accepted answer 帮助我指出了正确的方向,以使其正常工作。尽管缓存确实可能是个问题,但在您自己的包中包含 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 环境变量)。

【讨论】:

    【解决方案2】:

    对于所有登陆这里的人,我解决了我的问题,我可以告诉你的是:

    1. 仔细检查您是否在 AppKernel 中启用了 Bundle
    2. 使用命令 php bin/console cache:clear --env=dev(或 env=prod)清除 symfony 缓存
    3. 手动删除缓存文件夹

    【讨论】:

      猜你喜欢
      • 2019-03-29
      • 2018-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多