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

cra*_*ter 10 symfony symfony-2.7

在symfony 2.3中,这是service.yml中的这一行来到翻译器

在service.yml

arguments: [@translator,....
Run Code Online (Sandbox Code Playgroud)

在serviceFunctions.php中

 public function __construct(Translator $translator,...) {
    $this->translator = $translator;
Run Code Online (Sandbox Code Playgroud)

现在我收到错误:

必须是Symfony\Component\Translation\Translator的实例,给出了Symfony\Component\Translation\DataCollectorTranslator的实例

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

小智 18

尝试执行以下步骤:

类:

use Symfony\Component\Translation\TranslatorInterface;

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

public function yourFunction(){
    $this->translator->trans('key', array(), 'yourDomain');
}
Run Code Online (Sandbox Code Playgroud)

服务:

yourService:
        class: yourClass
        arguments: [@translator]
        tags:
            - { name : kernel.event_listener, event: kernel.request, method: yourFunction }
Run Code Online (Sandbox Code Playgroud)

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


qoo*_*mao 5

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

use Symfony\Component\Translation\TranslatorInterface;

...

public function __construct(TranslatorInterface $translator)
{
    $this->translator = $translator;
}
Run Code Online (Sandbox Code Playgroud)