我试图使用以下技术在一个动作中使用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 回答
服务通常(并且可以自动)注入构造函数 .
它们也可以自动放入动作方法参数中,但[必须标记控制器以启用它] . (http://symfony.com/doc/current/service_container/3.3-di-changes.html)
使用内置的PHP Reflection api检测Request(以及3.2,SessionInterface和User / UserInterface等) . 有一个更专业的子系统能够识别并自动添加它们,使用
ArgumentResolver
(使用SessionValueResolver
和ServiceValueResolver
) - 超出现有的ParameterConverter
(用于从动作方法参数的参数ID中获取实体) .