web-dev-qa-db-ja.com

symfony2.7パストランスレータをサービスコンテナに

Symfony 2.3では、翻訳者に到達するのはservice.ymlのこの行でした

Service.ymlで

arguments: [@translator,....

serviceFunctions.phpで

 public function __construct(Translator $translator,...) {
    $this->translator = $translator;

今、私はエラーを受け取ります:

symfony\Component\Translation\Translatorのインスタンスである必要があり、Symfony\Component\Translation\DataCollectorTranslatorのインスタンスが指定されている必要があります

本番モードでも開発中の2.7でサービスにアクセスするにはどうすればよいですか?

10
craphunter

この手順に従ってください:

クラス:

use Symfony\Component\Translation\TranslatorInterface;

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

public function yourFunction(){
    $this->translator->trans('key', array(), 'yourDomain');
}

サービス:

yourService:
        class: yourClass
        arguments: [@translator]
        tags:
            - { name : kernel.event_listener, event: kernel.request, method: yourFunction }

私はこれを私のコードで使用し、それは機能します;)

18
Mahdi Trimech

実際のトランスレータクラスではなく、インターフェイスを使用してみてください。インターフェイスを型のヒントとして使用することで、インターフェイスに適合する限り何でも使用できます。たとえば、コードを変更することなく、開発中のデバッグトランスレータを本番環境の通常のデバッグトランスレータに渡すことができます。

use Symfony\Component\Translation\TranslatorInterface;

...

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