У меня есть контроллер, допустим Acme\ShopBundle\Controller\ProductListController
И его определение в services.yml выглядит следующим образом:
services:
Acme\ShopBundle\Controller\ProductListController:
class: Acme\ShopBundle\Controller\ProductListController
arguments: ['@product_service']
Что бросает это в мой файл журнала:
User Deprecated: The "Acme\ShopBundle\Controller\ProductListController" service is private, checking for its existence is deprecated since Symfony 3.2 and will fail in 4.0.
С последующим
User Deprecated: The "Acme\ShopBundle\Controller\ProductListController" 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.
Список файлов трассировки стека полностью находится внутри vendor/symfony, поэтому я предполагаю, что что-то неправильно настроено, но не понимаю, что именно. Любая помощь приветствуется.






Служба контроллера должна быть общедоступной:
services:
Acme\ShopBundle\Controller\ProductListController:
public: true
arguments: ['@product_service']
Почему вы все равно не используете автопроводку? Затем вы можете зарегистрировать все свои контроллеры:
Acme\ShopBundle\Controller\:
resource: '../src/Acme/ShopBundle/Controller' # mutatis mutandis
tags: ['controller.service_arguments']
Пожалуйста, прочитайте о новых возможностях управления зависимостями в Symfony 3.
Я - контроллеры автоматической проводки, но этот контроллер должен иметь @product_service в качестве первого аргумента, иначе я получаю: Type error: Too few arguments to function Acme\ShopBundle\Controller\ProductListController::__construct()
Но спасибо, настройка public: true решает это уведомление
Вместо того, чтобы делать его общедоступным, вы действительно должны пометить его как контроллер: tags: ['controller.service_arguments'] Я должен добавить, что если вы позволите autowire делать это, вам вообще не понадобится определение службы.