如何在Symfony服务中注入参数数组?

4

我试图将一些twig视图注入为自定义邮件服务的模板,这将作为另一个服务的依赖项。

我不知道为什么,但好像Symfony没有看到我尝试注入到$parameters中的参数。

如何正确地将这个服务数组作为参数注入?

这是services.yaml的部分内容:


parameters:
    locale: 'en'
    template: '%fos_user.registration.confirmation.template%'
    resetting: '%fos_user.resetting.email.template%'
    from_email: 'somemail@mail.com'
    confirmation: '%fos_user.registration.confirmation.from_email%'
    resetting_password: '%fos_user.resetting.email.from_email%'

services:

    user.mailer.rest:
        class: App\Mailer\RestMailer
        public: false
        parent: fos_user.mailer.twig_swift
        autoconfigure: false
        autowire: true
        arguments:
            $parameters:
              - '@template'
              - '@resetting'

RestMailer服务的构造函数:
public function __construct(\Swift_Mailer $mailer, UrlGeneratorInterface $router, \Twig_Environment $twig, array $parameters)
  {
    $this->mailer = $mailer;
    $this->router = $router;
    $this->twig = $twig;
    $this->parameters = $parameters;
  }

  public function sendConfirmationEmailMessage(UserInterface $user)
  {
    $template = $this->parameters['template']['confirmation'];
//...

以下是返回的错误信息:

在 DefinitionErrorExceptionPass.php 的第 54 行:

无法自动装配服务 "App\Mailer\RestMailer":方法 "__construct()" 的参数 "$parameters" 是类型提示为 "array",您应该明确配置其值。


4
将"user.mailer.rest"更改为"App\Mailer\RestMailer"。自动装配检测到了您的类,并尝试创建一个ID为"App\Mailer\RestMailer"的第二个服务,因此出现了错误。这是其中一种容易忽略的情况。话虽如此,像“@template”这样的东西会注入模板化服务。可能不是您想要的。因此,您还需要稍微处理一下。 - Cerad
1个回答

1

您是否已经在services.yml中进行了配置?

如果您想使用config.yml中的参数,则必须在services.yml中设置以使用/调用这些参数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接