Symfony2:最佳实践如何从另一个包中获取数据?

时间:2012-01-15 12:12:04

标签: php symfony interaction bundles

我是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服务?以某种方式配置ArtistBundle,在对象的构造中设置UserBundle的对象?

2 个答案:

答案 0 :(得分:1)

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

但捆绑仍然分开。因此,即使你认为它没有分开,因为你在控制器动作中将事物放在一起,情况正好相反。

你的控制器可以帮助你将各种东西分开,但只能使用分开的捆绑包。

答案 1 :(得分:0)

在我看来,我会创建myProjectBundle。然后创建一个Entity文件夹,然后在其中创建Album Artist和User文件夹。在里面为每个表(专辑,atrtis,用户)创建Doctrine。

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