Symfony 3.4在控制器动作中注入服务

Dev*_*per 1 symfony symfony-3.4

services.yml

services:
  _defaults:
          autowire: true
          autoconfigure: true
          public: true 
Run Code Online (Sandbox Code Playgroud)

控制器:

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

错误

:indexAction()" requires that you provide a value for the "$contactService" argument.
Run Code Online (Sandbox Code Playgroud)

我对本示例工作应采取的措施(向控制器方法自动注入服务)

fxb*_*xbt 6

services.yaml文件中,您缺少两件事:

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

App\Controller\:
    resource: '../src/Controller'
    tags: ['controller.service_arguments']
Run Code Online (Sandbox Code Playgroud)

第一行告诉Symfony使src /中的类可用作服务。这将为每个类创建一个服务,其ID为完全限定的类名。

对于第二行,控制器是单独导入的,以确保即使不扩展任何基本控制器类,也可以将服务作为操作参数注入。

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']
Run Code Online (Sandbox Code Playgroud)

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