Контроллер Symfony 3.4, зарегистрированный как служба, выдает предупреждение об устаревании

У меня есть контроллер, допустим 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, поэтому я предполагаю, что что-то неправильно настроено, но не понимаю, что именно. Любая помощь приветствуется.

symfony.com/doc/current/contributing/code/conventions.html — время от времени некоторые классы и/или методы устаревают в фреймворке; это происходит, когда реализация функции не может быть изменена из-за проблем с обратной совместимостью, но мы все еще хотим предложить «лучшую» альтернативу. В этом случае старая реализация может быть объявлена ​​устаревшей.
Andrei Lupuleasa 30.07.2019 12:20
Стоит ли изучать 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 и хотите разрабатывать...
2
1
85
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Служба контроллера должна быть общедоступной:

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::__construc‌​t()

cloakedninjas 30.07.2019 12:29

Но спасибо, настройка public: true решает это уведомление

cloakedninjas 30.07.2019 12:34

Вместо того, чтобы делать его общедоступным, вы действительно должны пометить его как контроллер: tags: ['controller.service_arguments'] Я должен добавить, что если вы позволите autowire делать это, вам вообще не понадобится определение службы.

Cerad 30.07.2019 14:21

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