我正在尝试使用以下技术在操作中使用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
答案 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
(使用SessionValueResolver
和ServiceValueResolver
) - 超出现有ParameterConverter
(用于从参数中获取实体)动作方法参数的ID。)