0

私は symfony2 が初めてで、今は理解できないことがいくつかあります。この場合、バンドまたはアーティストが作成したすべてのアルバムを表示したいと考えています。ユーザーがログインしている場合、このユーザーのコレクションに 1 つのアルバムがあるかどうか、同じページに表示したい。

「ArtistBundle」、「UserBundle」、「AlbumBundle」などのさまざまなバンドルがあります。ユーザー関連の情報は実際には ArtistBundle に属するものではないため (「関心の分離」)、UserBundle から情報を取得したいと考えています。

現在、これを行うには2つの方法しかありません。

<?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 をどうにか設定?

4

2 に答える 2

1

関心の分離は、さまざまなものにさまざまなバンドルを用意することです。コントローラーを分離することはできません。さまざまなものを組み合わせてプレイする必要があります。

しかし、バンドルはまだ分離されています。ですから、コントローラ アクションでまとめたから分離していないと思っていても、その逆です。

コントローラーは、それらをまとめながら分離するのに役立ちますが、分離されたバンドルのみを使用します。

于 2012-01-15T12:23:45.710 に答える
0

私の意見では、myProjectBundle を作成します。次に、Entity フォルダーを作成し、そこに Album Artist フォルダーと User フォルダーを作成します。内部では、各テーブル (album、atrtis、user) に対して Doctrine を作成します。

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

于 2012-01-15T14:46:06.360 に答える