Symfony与不同的实体经理合作
问题描述:
我想创建一个应用程序,例如博客和论坛等部分。现在我希望用户能够在我的网站上创建一个帐户,并使用该帐户可以使用论坛和博客。这很容易。但是我希望将表保存在独立的数据库中以保持一个漂亮而干净的结构。假设我使用3个数据库,一个用于UserBundle,一个用于BlogBundle,另一个用于ForumBundle。这需要3个实体经理。但这意味着我无法使用来自ForumBundle或BlogBundle的实体与UserBundle中的用户实体之间的关系。在其他管理器的映射下简单添加UserBundle将在其他数据库中创建新表,这是我试图避免的。 那么,有没有一种方法可以让bundle“知道”其他bundle中的实体? 我知道从技术上讲,使捆绑依赖于其他捆绑包并不是一件好事,但我会如何实现我的想法?Symfony与不同的实体经理合作
答
对我来说合理地工作的一种方法是使用事件系统进行查询。
假设您在Forum Bundle中,您已经检索了给定线程的帖子列表,现在您需要每个帖子的用户信息。你让用户ID,然后数组:
$userIds = array(...list of users you need information for...);
$findUsersEvent = new FindUsersEvent($userIds);
$dispatcher->dispatch('FindUsers',$findUsersEvent);
$users = $findUsersEvent->getUsers();
所以现在我有一个均能按用户ID索引的用户信息,从中我可以再拉附加信息的列表。
Forum和User bundle之间唯一的耦合是FindUsersEvent类,它可以放在某种常见的包中。论坛包不关心用户如何加载。用户包只需要一个监听器。
============================================== ====================
第二种方法是基本上使用像api这样的REST来抓取用户信息。
我会试试看。谢谢! – Kable 2014-09-25 13:06:24