The service is private, checking for its existence is deprecated since Symfony 3.2 and will fail in 4.0.

Иногда полезно заглядывать в файл prod.log вашего Symfony приложения, чтобы понимать что в нём происходит во время выполнения. Иногда там можно видеть странные вещи, например:

php.INFO: User Deprecated: The service is private, checking for its existence is deprecated since Symfony 3.2 and will fail in 4.0. {"exception":"[object] (ErrorException(code: 0): User Deprecated: The service is private, checking for its existence is deprecated since Symfony 3.2 and will fail in 4.0. at /var/www/app/current/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Container.php:224)"} []
php.INFO: User Deprecated: The service is private, getting it from the container is deprecated since Symfony 3.2 and will fail in 4.0. You should either make the service public, or stop using the container
 directly and use dependency injection instead. {"exception":"[object] (ErrorException(code: 0): User Deprecated: The service is private, getting it from the container is deprecated since Symfony 3.2 and will fail in 4.0. You
 should either make the service public, or stop using the container directly and use dependency injection instead. at vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Container.php:282)"} []

Это возникает от того, что начиная с Symfony 3.4 все сервисы являются приватными по-молчанию. Ничего страшного в этом нет, но файл с логом достаточно быстро заполняется подобным мусором, поэтому будет неплохо это исправить. Достаточно во время регистрации сервисов в контейнере указать их видимость:

$container->register($name, $class)->setPublic(true);

Или подобным образом в yml-конфиге:

services:
    #  сделать общедоступными все службы, определённые в этом файле
    _defaults: { public: true }
    # задать публичную видимость для определённого сервиса
    App\Manager\UserManager:
        public: true

Использование контейнера напрямую не считается хорошей практикой, поскольку он скрывает зависимости ваших классов, делая их связанными с внешней конфигурацией, поэтому их труднее тестировать, сложнее изучать и т. д.

В приложениях Symfony службы и  алиасы являются публичными по умолчанию. Это означает, что когда у вас есть контейнер под рукой, вы можете легко получить сервисы, например, в контроллерах, которые расширяют базовый контроллер Symfony ($this->get (‘app.my_service’)) или при внедрении service container в ваши классы ($container->get(‘app.my_service’)).

Начиная с Symfony 3.3, появились новые примитивы для инъекций зависимостей, которые могли полностью заменить случаи, когда требовалась инъекция сервис-контейнера (например, для достижения ленивой загрузки или предотвращения циклических ссылок).

Разработчики Symfony готовы отказаться от необходимости внедрять контейнер в пользовательских классах. Вот почему в Symfony 3.4 сервисы и псевдонимы стали приватными по умолчанию. Это означает, что даже если вам удастся создать контейнер, вы больше не сможете пользоваться методом get(). Вместо этого вы должны использовать dependency injection.

Если вы используете autowiring в своем приложении, вам не придётся делать много изменений, потому что вы уже внедряете сервисы вместо того, чтобы получать их через общедоступный идентификатор. Это работает для обычных классов, но также для контроллеров и команд, поскольку они сами по себе являются сервисами.

Кроме того, вы можете обновить своё приложение, чтобы пометить службы как общедоступные.

Эти изменения также повлияют на сторонние пакеты, используемые в ваших проектах. Если ваш любимый пакет использует контейнер внутри, отправьте им запросы на исправление этого: начиная с Symfony 3.4 больше нет причин, чтобы играть с контейнером.

В ядре Symfony уже сделали все службы и псевдонимы приватными, за исключением нескольких, которые требуются во время загрузки. Фактически, bootstrapping является последним и единственным законным случаем использования контейнера.

Итак, следует ли отказаться от возможности полностью внедрить service_container вместе с ContainerAware? Эту возможность сообщество будет  рассматривать при подготовке к разработке Symfony 5.

Подробности и обсуждения этого можете посмотреть здесь:

https://symfony.com/blog/new-in-symfony-3-4-services-are-private-by-default