Symfony 3.4 внедрение службы в действие контроллера

services.yml

services:
  _defaults:
          autowire: true
          autoconfigure: true
          public: true 

Контроллер:

 /**
     * @Security("has_role('ROLE_USER')")
     * @Route("/", name = "homepage")
     */
    public function indexAction(ContactService $contactService)
    {

Ошибка

:indexAction()" requires that you provide a value for the "$contactService" argument.

Что мне нужно сделать, чтобы этот пример работал (метод автоматического ввода службы в контроллер)

Стоит ли изучать 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 нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
1
0
2 487
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

В вашем файле services.yaml вам не хватает двух вещей:

App\:
    resource: '../src/*'

App\Controller\:
    resource: '../src/Controller'
    tags: ['controller.service_arguments']

Первая строка говорит Symfony сделать классы в src / доступными для использования в качестве сервисов. Это создает службу для каждого класса, идентификатор которой является полным именем класса.

Для второй строки контроллеры импортируются отдельно, чтобы убедиться, что службы могут быть введены в качестве аргументов действия, даже если вы не расширяете какой-либо базовый класс контроллера.

https://symfony.com/doc/current/service_container/3.3-di-changes.html

Если вы не используете новую структуру каталогов Symfony Flex и все еще используете бандлы, конфигурация будет немного другой:

AppBundle\:
    resource: '../../src/AppBundle/*'

AppBundle\Controller\:
    resource: '../../src/AppBundle/Controller'
    tags: ['controller.service_arguments']

https://symfony.com/doc/3.4/service_container/3.3-di-changes.html

Можете ли вы предоставить исходную документацию для сервисов из методов действий? :)

Nek 12.04.2018 12:12

Каков пример для пакетов поставщиков - ресурс: '../../vendor/easycorp/easyadmin-bundle/src/Controller' - не работает

Developer 12.04.2018 12:55

Ваш пример не работает - для меня этот рабочий ресурс: '../../src/AppBundle/Controller' этот не работает ресурс: '../src/AppBundle/Controller' и для поставщика - я не могу найти способ работать пример: ресурс: 'vendor / easycorp / easyadmin-bundle / src / Controller'

Developer 12.04.2018 12:59

@GregHmhmm Вы тоже адаптировали пространство имен? AppBundle\Controller\: resource: '../src/AppBundle/Controller'

fxbt 12.04.2018 13:03

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