Сервис Symfony с 3.3 до 3.4 не найден

Попытка обновить проект с Symfony 3.3 до 3.4. Я сделал composer update symfony/symfony --with-depdencies и добавил public: false в свой файл services.yml.

Теперь, когда я запускаю свои тесты PHPUnit, я получаю эту ошибку:

Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException : The service "templating.loader.cache" has a dependency on a non-existent service "templating.loader.wrapped".

Есть идеи, почему это происходит? Я не могу найти никаких результатов Google или каких-либо ссылок на документацию Symfony по этому поводу ...

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
3
0
586
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если вы не подготовили свой код для частных служб, вам не следует использовать тег public: false. Это используется для обозначения служб как частных. Возможно, где-то в вашем коде есть что-то вроде $var = $container->get('example');, которое вызывает общественную службу. Вы можете прочитать больше здесь.

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

Было обнаружено, что проблема вызвана переопределением определения templating.loader.cache на public в классе передачи компилятора, чтобы разрешить доступ во время функциональных тестов.

На основе кода здесь: https://github.com/symfony/symfony-docs/issues/8097

tl; dr не делайте этого:

final class TestCompilerPass implements CompilerPassInterface
{
    /** {@inheritdoc} */
    public function process(ContainerBuilder $container)
    {
        foreach ($container->getDefinitions() as $id => $definition) {
            $definition->setPublic(true);
        }
    }
}

Вместо этого ограничьте услуги, которые вы публикуете, теми, которые вам действительно нужны.

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