私はSymfony2のプロジェクトでは、通常のクラスがあります。このクラス内で今アクセスサービス
class RangeColumn extends Column{
//...
}
を私は小枝やSymfony2の翻訳サービスを使用したいしたレンダリング機能であり、特定のテンプレートをレンダリングする。このサービスに適切な方法でアクセスするにはどうすればよいですか?
私はSymfony2のプロジェクトでは、通常のクラスがあります。このクラス内で今アクセスサービス
class RangeColumn extends Column{
//...
}
を私は小枝やSymfony2の翻訳サービスを使用したいしたレンダリング機能であり、特定のテンプレートをレンダリングする。このサービスに適切な方法でアクセスするにはどうすればよいですか?
dependency injectionを使用してください。本当にシンプルなコンセプトです。
必要なサービスをクラスに渡すだけです。
依存関係がである場合、はコンストラクタにそれらを渡します。それらが(オプション)の場合はセッターを使用してください。
さらに進んで、あなたのクラスの構築を依存性注入コンテナに委任することもできます(サービスを外してください)。
サービスは「通常の」クラスと同じです。コンストラクションがコンテナに委譲されただけです。
コード例:
<?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
依存性注入タグはSymfony 2.6で '@ translator.default'であり、' @ translator'タグは現在LoggingTranslatorを参照しています。 – Lashae