Symfony2的:在一根树枝过滤器扩展

问题描述:

使用翻译我试图用翻译在自定义过滤器树枝像这样Symfony2的:在一根树枝过滤器扩展

public function formatTime($timestamp) 
{ 
    $str = date('j %\m%',$timestamp); 
    $str = str_replace($str, '%m%', $this->get('translator')->trans('month'.date('m', $timestamp))); 
    return $str; 
} 

offcourse得到的是未知的功能。 我应该让自己的扩展程序知道环境还是简单地请求翻译类来使其可用?

你可以注入一个translator服务到类:

<service id="acme.extension" class="Acme\Twig\Extensions\FormatterExtension"> 
    <tag name="twig.extension"/> 
    <argument type="service" id="translator"/> 
</service> 

,然后存储转换的实例在受保护的领域,并在以后使用它:

public function formatTime($timestamp) 
{ 
    $str = date('j %\m%',$timestamp); 
    $str = str_replace($str, '%m%', $this->translator->trans('month'.date('m', $timestamp))); 
    return $str; 
} 

UPD1:配置YAML服务定义:

acme.extension: 
    class: Acme\Twig\Extensions\FormatterExtension 
    arguments: [@translator] 
    tags: 
     - name: twig.extension 
+0

我的服务是在阳明配置文件中定义的,我想应该是这样的: twig.extension.rc_extension: 类:ACME \枝杈\扩展\ FormatterExtension 参数: - {类型:服务ID:翻译} 标签: - {name:twig.extension} – svassr

+0

添加了YAML格式的更新。 – lisachenko

+3

依赖注入标记是Symfony 2.6的'@ translator.default','@ translator'标记现在引用LoggingTranslator。 – Lashae

我将使用服务容器将您的类定义为服务。然后,您可以在翻译服务作为传递这样一个说法:

在services.yml:

services: 
    your.class.identification.key: 
     class: \your\class\name 
     arguments: [@translator] 

之后,译者将通过你上面提供的代码中。

+0

依赖注入标签是Symfony的2.6'@ translator.default'的'@ translator'标签是指LoggingTranslator现在。 – Lashae

控制层$this->get()内部调用翻译服务的get方法。

为了模仿这种行为,可以设置依赖注入并将依赖容器注入到构造函数中。一旦你完成了这个,你可以通过使用这样的东西来获得翻译:$this->container->get('translator')

只是为了更新@Alexander答案。不要忘了把

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