Symfony2:在枝条过滤器扩展中使用转换器

sva*_*ssr 4 translation filter symfony

我正试图在这样的自定义枝条过滤器中使用翻译

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

当然得到的是未知的功能.我是否应该让我的扩展程序了解环境或只是请求翻译课程使其可用?

lis*_*nko 14

您可以translator在您的班级注入服务:

<service id="acme.extension" class="Acme\Twig\Extensions\FormatterExtension">
    <tag name="twig.extension"/>
    <argument type="service" id="translator"/>
</service>
Run Code Online (Sandbox Code Playgroud)

然后在受保护的字段中存储转换器实例并在以后使用它:

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

UPD1: YAML服务定义的配置:

acme.extension:
    class: Acme\Twig\Extensions\FormatterExtension
    arguments: [@translator]
    tags:
        - name: twig.extension
Run Code Online (Sandbox Code Playgroud)

  • Symfony 2.6的依赖注入标记为`@ translator.default`,`@ translator`标记现在引用LoggingTranslator. (3认同)