在 Symfony 3.4 应用程序中排除由作曲家自动加载的数据装置

Excluding Data Fixtures for being autloaded by composer in a Symfony 3.4 application

我在开发环境中使用 doctrine/data-fixtures 并且要求如下:

composer.json:

"autoload": {
    "psr-0": {
        "": "src/",
        "SymfonyStandard": "app/"
    },
    "classmap": [ "app/AppKernel.php", "app/AppCache.php" ]
},
"require-dev": {
    "symfony/maker-bundle": "^1.8",
    "phpunit/phpunit": "^7.0",
    "doctrine/data-fixtures": "dev-rfc1872 as v1.2.1",
    "doctrine/doctrine-fixtures-bundle": "^3.0"
},

在我的 Symfony 3.4 应用程序中,我的数据装置位于 /src/AppBundle/DataFixtures/ORM/*.php

当我 运行 作曲家时,它又 运行 是一个 Symfony cache:clear 我得到以下错误:

[RuntimeException]
An error occurred when executing the "'cache:clear --no-warmup'" command:
In DefinitionErrorExceptionPass.php line 37:

While discovering services from namespace "AppBundle\", an error was thrown    
 when processing the class "AppBundle\DataFixtures\ORM\LoadCourseData": "Cl    
ass Doctrine\Common\DataFixtures\AbstractFixture not found".

我想将 DataFixtures 命名空间排除在自动加载之外,但我找不到这样做的方法。

我认为您不想将数据固定装置排除在自动加载之外,因为它们是有效的 PHP 类.

此错误来自 Symfony 的自动装配功能。所以我假设你确实在使用自动装配。 您应该从自动装配发现中获取数据装置,这可以在 services.yml 中使用 exclude 选项完成。

假设你有类似的东西(默认情况下应该有):

AppBundle\:
    resource: '../../src/AppBundle/*'
    exclude: '../../src/AppBundle/{Entity,Repository}'

您需要做的就是将 DataFixtures 命名空间添加到 exclude:

AppBundle\:
    resource: '../../src/AppBundle/*'
    exclude: '../../src/AppBundle/{Entity,Repository,DataFixtures}'

您可以在 here nad here

中阅读更多相关信息