Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony 3服务配置提供动态配置_Symfony_Dependency Injection - Fatal编程技术网

Symfony 3服务配置提供动态配置

Symfony 3服务配置提供动态配置,symfony,dependency-injection,Symfony,Dependency Injection,我想知道在以下用例下如何避免setter注入 我有一系列带标签的服务: interface EmailFormatter class CvEmailFormatter implements EmailFormatter class RegistrationEmailFormatter implements EmailFormatter class LostPasswordEmailFormatter implements EmailFormatter 我使用CompilerPass通过调用其

我想知道在以下用例下如何避免setter注入

我有一系列带标签的服务:

interface EmailFormatter

class CvEmailFormatter implements EmailFormatter
class RegistrationEmailFormatter implements EmailFormatter
class LostPasswordEmailFormatter implements EmailFormatter
我使用CompilerPass通过调用其addEmailFormatter()方法将这些内容注入到邮件服务中

每个EmailFormatter实例都需要一些配置,这些配置必须在运行时从当前用户检索:

/**
 * @var FormatterConfig[]
 * @ORM\OneToMany(targetEntity="AppBundle\Entity\FormatterConfig", mappedBy="user", cascade={"persist"}, orphanRemoval=true)
 */
protected $formatterConfigs;
现在,我正在检查用户是否在mailer服务的addEmailFormatter()方法中为特定的EmailFormatter创建了配置。如果有,则setConfig()注入配置对象。如果不存在配置,则根本不会添加EmailFormatter

public function addEmailFormatter(EmailFormatter $formatter, $alias)
{
    $formatterConfig = $this->user->getFormatterConfig($alias);

    if (null !== $formatterConfig) {
        $this->formatters[$alias] = $formatter;
        $formatter->setConfig($formatterConfig);
    }
}

鉴于我正在处理一个可变的服务集合,这是否是一个合法的用例?

问题是什么?您试图避免的错误或情况是什么?为什么不使用当前的设置?我的问题是关于一个相当广泛的建议,即setter注入是一种不好的做法。