symfony2.7在服务容器中传递转换器

时间:2015-10-17 15:27:33

标签: symfony symfony-2.7

在symfony 2.3中,service.yml中的这一行是为了找到翻译者

在service.yml

arguments: [@translator,....

在serviceFunctions.php

 public function __construct(Translator $translator,...) {
    $this->translator = $translator;

现在我收到了错误:

  

必须是Symfony \ Component \ Translation \ Translator的一个实例,   Symfony \ Component \ Translation \ DataCollectorTranslator的实例   给定

如何在生产模式下使用2.7 in dev中的服务?

2 个答案:

答案 0 :(得分:17)

尝试执行以下步骤:

类别:

use Symfony\Component\Translation\TranslatorInterface;

public function __construct(TranslatorInterface $translator) {
    $this->translator = $translator;
}

public function yourFunction(){
    $this->translator->trans('key', array(), 'yourDomain');
}

服务:

yourService:
        class: yourClass
        arguments: [@translator]
        tags:
            - { name : kernel.event_listener, event: kernel.request, method: yourFunction }

我在我的代码和它的工作中使用它;)

答案 1 :(得分:5)

尝试使用界面而不是实际的翻译类。通过将接口用作类型提示,只要它适合接口,就可以使用任何东西,例如,您可以使用生产中的常规调试转换器传入调试转换器,而无需更改代码。

use Symfony\Component\Translation\TranslatorInterface;

...

public function __construct(TranslatorInterface $translator)
{
    $this->translator = $translator;
}