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.
我应该对此示例工作做什么(自动注入服务到控制器方法)
答案 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