Symfony 尝试为';使用#instanceof#标记条令数据装置;测试';西蒙尼环境4

Symfony 尝试为';使用#instanceof#标记条令数据装置;测试';西蒙尼环境4,symfony,service,doctrine,autowired,instanceof,Symfony,Service,Doctrine,Autowired,Instanceof,我正在编写一个symfony4.1restapi,并尝试使用fixture为phpunit测试设置测试数据库 我的问题是,我希望通过为原则:fixtures:load命令提供-e test选项,使fixture能够基于symfony env运行 在阅读了一些文档后,我考虑使用symfony autowiring instanceof functionality和services\u test.yaml文件,但它似乎不起作用 如果我将\u instanceof代码位移动到services.yaml

我正在编写一个symfony4.1restapi,并尝试使用fixture为phpunit测试设置测试数据库

我的问题是,我希望通过为
原则:fixtures:load
命令提供
-e test
选项,使fixture能够基于symfony env运行

在阅读了一些文档后,我考虑使用symfony autowiring instanceof functionality和
services\u test.yaml
文件,但它似乎不起作用

如果我将
\u instanceof
代码位移动到
services.yaml
,它可以工作,但当然对所有环境都有效

有人有主意吗?也许我错过了什么。提前感谢您的建议:)

以下是我所做的:

用于标记的接口 services.yaml文件 解决方案(服务测试yaml)
我认为
\u instanceof
只适用于当前文件。因此,您需要在
服务\u test.yaml
中自动发现PSR-4装置:

services:
    _defaults:
        public: true

    _instanceof:
        App\DataFixtures\BookieTestFixtureInterface:
            tags: ['doctrine.fixture.orm']

    App\:
        resource: '../src/Fixtures'
让我知道它是如何工作的



关于下的
\u instanceof
的范围也有一个类似的问题,但没有回答。

非常感谢!这确实是一个正确的解决方案,我只需添加多一点配置,否则它不会将ObjectManager传递到我的设备。我将用完整的答案编辑我的问题。
<?php

namespace App\DataFixtures;

use Doctrine\Common\DataFixtures\AbstractFixture;
use Doctrine\Common\Persistence\ObjectManager;

class UserFixtures extends AbstractFixture implements BookieTestFixtureInterface
{
    public function load(ObjectManager $manager)
    {
        // do some stuff
    }
}
services:
    _defaults:
        public: true

    _instanceof:
        App\DataFixtures\BookieTestFixtureInterface:
            tags: ['doctrine.fixture.orm']
services:
    _defaults:
        autowire: true     
        autoconfigure: true 
        public: false

    App\:
        resource: '../src/*'
        exclude: '../src/{Entity,Migrations,Tests,Kernel.php}'

    App\Controller\:
        resource: '../src/Controller'
        tags: ['controller.service_arguments']
services:
    _defaults:
        autowire: true
        autoconfigure: true
        public: true

    _instanceof:
        App\DataFixtures\BookieTestFixtureInterface:
            tags: ['doctrine.fixture.orm']

    App\:
        resource: '../src/*'
        exclude: '../src/{Entity,Migrations,Tests,Kernel.php}'
services:
    _defaults:
        public: true

    _instanceof:
        App\DataFixtures\BookieTestFixtureInterface:
            tags: ['doctrine.fixture.orm']

    App\:
        resource: '../src/Fixtures'