首页 文章

Symfony服务注入行动

提问于
浏览
0

我试图使用以下技术在一个动作中使用SwiftMailer服务:

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

public function submitAction (Request $request, \Swift_Mailer $mailer)
{
        $mailer = $this->get('mailer');
        var_dump($mailer);
}

这是错误:

控制器“AppBundle \ Controller \ QuoteController :: submitAction()”要求您为“$ mailer”参数提供值 . 参数可以为空,并且没有提供空值,没有提供默认值,或者因为在此之后存在非可选参数 .

var_dump 告诉我这不是空的 - 我最近升级到Symfony 3.3.10并将我的services.yml更改为以下内容:

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

1 回答

  • 2

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

    它们也可以自动放入动作方法参数中,但[必须标记控制器以启用它] . (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中获取实体) .

相关问题