尝试在 Symfony 4 中仅针对 'test' 环境使用 _instanceof 标记学说数据装置

Trying to tag doctrine data fixtures with _instanceof only for 'test' env in Symfony 4

我正在编写 Symfony 4.1 rest API 并尝试使用固定装置为我的 phpunit 测试设置测试数据库。

我的问题是,我希望通过为 doctrine:fixtures:load 命令

提供 -e test 选项,让 运行 基于 symfony 环境的固定装置

阅读一些文档后,我正在考虑使用 symfony 自动装配 _instanceof 功能以及 services_test.yaml 文件,但它似乎不起作用。

如果我将代码的 _instanceof 位移动到 services.yaml,它可以工作,但当然适用于所有环境。

有人有想法吗?也许我错过了什么。预先感谢您的建议:)

这是我所做的:

用于标记的界面

<?php

namespace App\DataFixtures;

interface BookieTestFixtureInterface
{
}

'test-only'夹具

<?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_test.yaml 文件

services:
    _defaults:
        public: true

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

services.yaml 文件

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_test.yaml)

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}'

我认为 _instanceof 仅适用于当前文件。所以你需要 PSR-4 autodiscover fixtures in services_test.yaml:

services:
    _defaults:
        public: true

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

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

告诉我它是如何工作的。


关于_instanceof的范围在release post on Symfony blog下也有类似的问题,但是没有回复。