Symfony服务注入行动

时间:2017-10-18 15:30:43

标签: symfony

我正在尝试使用以下技术在操作中使用SwiftMailer服务:

http://symfony.com/doc/current/service_container.html#fetching-and-using-services

BroadleafPageController

这是错误:

  

Controller" AppBundle \ Controller \ QuoteController :: submitAction()"   要求您为" $ mailer"提供价值。论点。或   参数可以为空,并且没有提供空值,没有   已提供默认值,或者因为存在非可选项   这之后的争论。

public function submitAction (Request $request, \Swift_Mailer $mailer) { $mailer = $this->get('mailer'); var_dump($mailer); } 告诉我这不是空的 - 我最近升级到Symfony 3.3.10并将我的services.yml更改为以下内容:

var_dump

1 个答案:

答案 0 :(得分:3)

服务通常(并且可以自动)注入构造函数。

它们也可以自动放入动作方法参数中,但[必须标记控制器以启用它]。(http://symfony.com/doc/current/service_container/3.3-di-changes.html

# controllers are imported separately to make sure they're public
# and have a tag that allows actions to type-hint services
AppBundle\Controller\:
    resource: '../../src/AppBundle/Controller'
    tags: ['controller.service_arguments']

使用内置的PHP Reflection api检测Request(以及3.2+,SessionInterface和User / UserInterface等)。有一个更专业的子系统能够识别并自动添加它们,ArgumentResolver(使用SessionValueResolverServiceValueResolver) - 超出现有ParameterConverter(用于从参数中获取实体)动作方法参数的ID。)