2012-01-15 2 views
0

私はsymfony2を新しくしましたが、今は得られないことがいくつかあります。この場合、私はバンドまたはアーティストによって作られたすべてのアルバムを表示したいと思います。ユーザーがログインしている場合、1つのアルバムがこのユーザーのコレクション内にあるかどうかにかかわらず、同じページに表示する必要があります。Symfony2:他のバンドルからデータを取得するにはどうすればいいですか?

"ArtistBundle"、 "UserBundle"、 "AlbumBundle"などのバンドルは違っています。ユーザー関連の情報はArtistBundleに本当に属しているものではありません(「懸念の分離」)。 UserBundle

は今、私はこれを行うための唯一の二つの方法を参照してください。

<?php 
namespace Acme/ArtistBundle/Controller; 
use Acme/UserBundle/User 

public function indexAction() 
{ 
    ... 
    $user = new User($userId); 
    $collectionInfo = $user->checkArtistAlbums($artistId); 
    ... 
} 

このソリューションは、うまくいくかもしれないが、それは私が(私が思う正しい方法だろう)依存性の注入を使用していないので、難しくユニットテストを作るの。

もう1つの可能性は、UserBundleコントローラをテンプレートに埋め込むことです。私はArtistBundleの出力に直接情報が必要なので、これはできません。

ここで「ベストプラクティス」は何ですか? UserBundleサービスの定義何らかの方法で、UserBundleのオブジェクトがオブジェクトの構築時に設定されているArtistBundleを設定しますか?

答えて

1

懸念の分離は、さまざまなものに対して異なるバンドルを持つことです。あなたはコントローラーを分けることができません。演奏をするためには、異なるものを一緒に持っていく必要があります。

しかし、バンドルは依然として分離されています。したがって、たとえあなたがコントローラーのアクションで物事を結びつけるために分離されていないと思っても、それとは逆の場合があります。

コントローラを使用すると、複数の物を分けることができます。

0

私の意見では、myProjectBundleを作成します。 Entityフォルダを作成すると、そこにAlbum ArtistフォルダとUserフォルダが作成されます。あなたの中で、各テーブル(アルバム、atrtis、ユーザー)ごとにDoctrineを作成します。

コントローラ(loginAction)で必要な情報を取得する(現在のユーザーのすべてのアルバムとアーティストを取得する)コールサービス(サービスフォルダとサービスクラスの作成)です。テンプレートを使用してログインページを描画し、別のテンプレートを使用して残りの情報を表示します。

+0

私はすべてを1つの汎用バンドルに分割することに同意しません。それは懸念の分離を破ります。 –