4

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

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 get 是未知功能。我应该让我的扩展了解环境还是简单地请求翻译类以使其可用?

4

4 回答 4

14

您可以将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
于 2012-06-19T13:59:53.387 回答
3

我会使用服务容器将您的类定义为服务。然后,您可以将翻译服务作为参数传入,如下所示:

在 services.yml 中:

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

之后,翻译器将通过您上面提供的代码提供。

于 2012-06-19T13:59:51.990 回答
2

只是为了更新@Alexander 的答案。别忘了放

private $translator;
public function __construct(TranslatorInterface $translator) {
   $this->translator = $translator;
}
于 2014-08-01T13:02:53.313 回答
1

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

为了模仿这种行为,您可以设置依赖注入并将依赖容器注入到您的构造函数中。完成此操作后,您可以使用以下内容获取翻译器:$this->container->get('translator').

于 2012-06-19T16:26:44.353 回答