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

时间:2018-04-12 09:48:16

标签: symfony 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.

我应该对此示例工作做什么(自动注入服务到控制器方法)

1 个答案:

答案 0 :(得分:4)

services.yaml文件中,您遗漏了两件事:

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

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

第一行告诉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']

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