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>

次に、translatorのインスタンスを保護されたフィールドに保存し、後で使用します。

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 に答える