【问题标题】:Symfony: How to use configuration parameters in a service class?Symfony:如何在服务类中使用配置参数?
【发布时间】:2017-08-15 16:22:46
【问题描述】:

我想在我的服务类mailer 中使用parameters.yml 中的参数 但是我在实例化邮件类时遇到了这个错误:

$mailer = new Mailer();

知道参数是在parameters.yml中定义的:

警告:AppBundle\Service\Mailer::__construct() 缺少参数 1,在

中调用
namespace AppBundle\Service


class Mailer
{
private $mailer_user;
private $mailer_password;
private $mailer_name;
private $mailer_host;
public function __construct($mailer_user, $mailer_password ,$mailer_name ,$mailer_host)
{
    $this->mailer_name = $mailer_user;
    $this->mailer_password = $mailer_password;
    $this->mailer_user = $mailer_name;
    $this->mailer_host = $mailer_host;
}
//.....
}

services.yml:

mailer:
    class:    'AppBundle\Service\Mailer'
    arguments:    [%mailer_user%, %mailer_password% ,%mailer_name% ,%mailer_host%]

【问题讨论】:

  • 你应该指定你得到什么错误(一些异常或什么?)因为“doesnt work”是不够的。 PS:您应该从参数值和服务参数%$mailer_host% 中删除美元符号(这是一个错字吗?)。
  • @gp_sflover 这是正确的做法吗? error =>哎呀,好像出了点问题。
  • 为什么要重复 services.yml 中的邮件参数?或者这只是某种复制/粘贴?
  • @Cerad 再次感谢您的帮助,我删除了重复的参数,但如果您能帮助我,我遇到了一个新错误
  • @Achraf 您不应该在问题解决后更改问题(对于新手来说,这可能是一个永无止境的问题:-)),而是为每个新问题打开一个新问题。

标签: symfony


【解决方案1】:

了解“如何在我的服务类中使用 parameters.yml 中的参数”(并了解如何在 Symfony 应用程序中使用服务)只需阅读 Symfony 文档注意您正在阅读的文档的 Symfony 版本

顺便说一句,您永远不应该像以前那样直接实例化服务类:

$mailer = new Mailer();

但是从服务容器中检索服务实例(Symfony 会自动注入所有配置的依赖项),就像我们通常在控制器中所做的那样(下面的示例使用提供的短代码扩展了 Symfony 标准版本中包含的 FrameworkBundle 提供的基本控制器):

$mailer = $this->container->get('mailer');

【讨论】:

  • 这是一个可靠的建议,虽然它持续了,但是现在不推荐使用 '$this->container->get('mailer')' 并且在 symfony 4 中被删除了。他们希望你使用 @987654324 @ 代替。
猜你喜欢
  • 2019-11-18
  • 2019-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多