symfony 2 Dependency Injection componentを新しいPHP 5.4 traitsで使用する方法を見つけようとしています。Symfony 2:依存性注入と特性
長いストーリーを短くするには(実際は短くはない)、私のプロジェクトでは、すべて独自の固有のコンストラクタを持つViewクラスを切り離しました。各ビューには、特性として定義されているゼロ個以上のビューヘルパーを使用することができます。
trait TranslatorHelper
{
/**
* @var Translator
*/
protected $translator;
/**
* @param Translator $translator
*/
protected function setTranslator(Translator $translator)
{
$this->translator = $translator;
}
/**
* @param string $text
* @return string
*/
public function translate($text)
{
return $this->translator->translate($text);
}
}
-
class UserEditView extends AbstractView
{
use TranslatorHelper;
public function __construct(User $user, UserEditForm $form)
{
// ...
}
}
私はセッターを行い、私のコントローラ、renderView()
、方法を持っているしたいのですがビューをレンダリングする前に、Viewクラスで使用されるすべての特性に基づいて注入:
class Controller
{
public function renderView(View $view)
{
// Check what traits are used by $view, and inject their dependencies
// {...}
// Then render the View
return $view->render();
}
}
012でこれを行う方法上の任意のアイデアコンポーネントですか?
主な問題は明らかに、ビューはDIコンテナによって作成されず、アプリケーションフロー内のどこにでも作成できることです。依存関係を注入する必要があるのはレンダリングされる前です。
最後の注意:私はSymfonyコンポーネントに縛られていません。別のDIコンテナ上のリードも高く評価されます。
DIをAOPで試すことができます:https://github.com/schmittjoh/JMSAopBundle/blob/master/Resources/doc/index.rstプロパティと引数のアノテーションによってサービスを自動的に挿入します。 – lisachenko
問題は、ビューヘルパー( 'TranslatorHelper'など)を一般的なものにしたいので、コンテナ内の依存関係のプロジェクト固有のIDを含むべきではないという理想です。 – Benjamin