Типаж PHPUnit не найден после обновления composer.json

Исходный composer.json

"autoload": {
    "psr-4": { "": "src/" },
    "classmap": [ "app/AppKernel.php", "app/AppCache.php" ],
    "exclude-from-classmap": [ "/tests/" ]
},
"autoload-dev": {
    "psr-4": { "tests\\": "tests/" }
}

Новый composer.json

"autoload": {
    "psr-4": {
        "AppBundle\\": "src/AppBundle",
        "TOTO\\": "src/TOTO"
    },
    "classmap": [
        "app/AppKernel.php",
        "app/AppCache.php" ],
    "exclude-from-classmap": [ "/tests/" ]
},
"autoload-dev": {
    "psr-4": {
        "Tests\\": "tests/"
    },
    "files": [
        "vendor/symfony/symfony/src/Symfony/Component/VarDumper/Resources/functions/dump.php"
    ]
},

Моя черта определена в tests\TOTO\Services\InvokeMethodTrait и вызывается другими тестами, такими как tests\TOTO\Services\ConversationServiceTest, поскольку это изменение для оптимизации автозагрузчика я получаю Fatal error: Trait 'tests\TOTO\Services\InvokeMethodTrait' not found in /var/www/symfony/tests/TOTO/Services/ConversationServiceTest.php on line 17. Раньше он работал правильно, и я ничего не менял в связанных классах.

Любая идея?

поможет ли это обсуждение на github? github.com/composer/composer/issues/2767

xmike 25.10.2018 11:38
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
1
616
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Оригинальная часть composer.json содержала:

"psr-4": { "tests\\": "tests/" }

и новый:

"psr-4": {
    "Tests\\": "tests/"
}

Можно увидеть изменение в случае пространства имен tests. Это не проблема для PHP (изначально), поскольку пространства имен и классы нечувствительны к регистру (отличный ответ с обзором чувствительности к регистру PHP https://stackoverflow.com/a/33273959/5264262). Но автозагрузчик композитора получает это неизвестное имя класса в виде строки и преобразует все эти полностью определенные имена классов в некоторые пути к require файлу, поэтому процесс чувствителен к регистру. Было некоторое обсуждение открытого вопроса на https://github.com/composer/composer/issues/2767, касающегося этой темы.

Последний момент: наши пространства имен и именование классов в composer.json должны быть совместимы с регистром.

Другие вопросы по теме