0

我是 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);
    ...
}

这个解决方案可能有效,但它使单元测试更难,因为我没有使用依赖注入(我认为这是正确的方式)。

另一种可能性是将 UserBundle 控制器嵌入到模板中。这是无法完成的,因为我需要直接在 ArtistBundle 的输出中提供信息。

那么这里的“最佳实践”是什么?定义一个 UserBundle 服务?以某种方式配置在对象的构造中设置了 UserBundle 对象的 ArtistBundle?

4

2 回答 2

1

关注点分离是为不同的事物提供不同的捆绑包。你的控制器不能分开,它需要把不同的东西放在一起,才能发挥作用。

但捆绑仍然分开。因此,即使您认为它并没有因为您在控制器操作中将事物组合在一起而将其分开,但情况恰恰相反。

您的控制器可帮助您将事物分开,同时将它们组合在一起,但仅使用单独的捆绑包。

于 2012-01-15T12:23:45.710 回答
0

在我看来,我会创建 myProjectBundle。然后创建一个实体文件夹,并在那里创建专辑艺术家和用户文件夹。在内部,您为每个表(专辑、atrtis、用户)创建 Doctrine。

我要做的是在我的控制器(loginAction)中调用服务(创建服务文件夹和服务类),这将提取所需的信息(获取当前用户的所有专辑和艺术家)。然后使用模板绘制登录页面并使用另一个模板显示其余信息。

于 2012-01-15T14:46:06.360 回答