找不到任何要加载的治具服务

时间:2018-06-22 09:05:06

标签: 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,该软件包在上述版本的最后一个版本之前都可以正常工作(最新测试和工作配置为PHP 5.6,Doctrine软件包^ 1.6,Doctrine orm ^ 2.5,fixture软件包^ 3.0)。

此捆绑软件在 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']

但是不幸的是,它一直在给出错误。任何我在做什么错的想法吗?很久以前,可以手动向Fixture命令指定要查找的捆绑软件,但现在不再可行

更新1: 抱歉,他们忘了指出错误消息:“找不到任何要加载的治具服务”

2 个答案:

答案 0 :(得分:0)

对于登陆这里的每个人,我都解决了我的问题,我能告诉你的是:

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

答案 1 :(得分:0)

accepted answer帮助我指出了正确的方向,以使此工作正常进行。尽管缓存确实可能是一个问题,但是在您自己的捆绑软件中拥有灯具确实需要您对其进行注册。

使用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环境变量)仅将其加载的一种方法。