2012-01-21 7 views
5

私はSymfony2のプロジェクトでは、通常のクラスがあります。このクラス内で今アクセスサービス

class RangeColumn extends Column{ 
     //... 
    } 

を私は小枝やSymfony2の翻訳サービスを使用したいしたレンダリング機能であり、特定のテンプレートをレンダリングする。このサービスに適切な方法でアクセスするにはどうすればよいですか?

答えて

10

dependency injectionを使用してください。本当にシンプルなコンセプトです。

必要なサービスをクラスに渡すだけです。

依存関係がである場合、コンストラクタにそれらを渡します。それらが(オプション)の場合はセッターを使用してください。

さらに進んで、あなたのクラスの構築を依存性注入コンテナに委任することもできます(サービスを外してください)。

サービスは「通常の」クラスと同じです。コンストラクションがコンテナに委譲されただけです。

11

コード例:

<?php 

class MyRegularClass 
{ 
    private $translator; 

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

    public function myFunction() 
    { 
     $this->translator->trans('sentence_to_translate'); 
    } 
} 

そして、あなたはあなたのクラスがサービスになりたい場合は:あなたのバンドルにあるあなたのservices.ymlファイルで 詳細については、

parameters: 
    my_regular_class.class: Vendor\MyBundle\Classes\MyRegularClass 

services: 
    mybundle.classes.my_regular_class: 
     class: %my_regular_class.class% 
     arguments: [@translator] 

、参照symfony2の章Service Container

+2

依存性注入タグはSymfony 2.6で '@ translator.default'であり、' @ translator'タグは現在LoggingTranslatorを参照しています。 – Lashae

関連する問題