10

在 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 的实例

在生产模式下,我如何才能在 dev 中使用 2.7 中的服务?

4

2 回答 2

20

尝试按照以下步骤操作:

班级:

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 }

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

于 2015-10-17T17:15:36.397 回答
6

尝试使用接口而不是实际的翻译器类。通过使用接口作为类型提示,您可以使用任何适合该接口的内容,例如,您可以在开发中传递一个调试翻译器,而在生产中使用一个常规翻译器,而无需更改您的代码。

use Symfony\Component\Translation\TranslatorInterface;

...

public function __construct(TranslatorInterface $translator)
{
    $this->translator = $translator;
}
于 2015-10-17T16:45:52.353 回答