环境

2016-02-29 24 views
0

我建立已登录基于用户多数据库应用程序需要来选择数据库。Symfony3多数据库/启用站点,环境

所以会有对设置和FOS用户捆绑一个共享表配置,但其余表将分配在不同的数据库中,基于用户添加到的组。

我设法找到教程如何使用基于子域的不同连接,但这不适用于我的情况。

这怎么能被存档?任何输入都非常感谢。

+0

是数据库模式:

namespace AppBundle; use Doctrine\Bundle\DoctrineBundle\Registry; use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage; class UserDatabaseHelper { private $tokenStorage; private $doctrine; public function __construct(TokenStorage $tokenStorage, Registry $doctrine) { $this->tokenStorage = $tokenStorage; $this->doctrine = $doctrine; } public function getManager() { $token = $this->tokenStorage->getToken(); if (!$token) { // return an entity manager for unauthenticated users return $this->doctrine->getManager('unauthenticated'); } $user = $token->getUser(); // set the manager name based on the user data $managerName = ...; return $this->doctrine->getManager($managerName); } } 

在你的控制器,你可以用刚才得到的实体管理器不同的还是这些只是多个数据库都有同一张桌子? –

回答

1

首先,您必须定义您的连接,如下所述:How to Work with multiple Entity Managers and Connections

然后您可以创建一个服务,根据用户组返回适当的实体管理器。

服务定义:

app.user_database_helper: 
    class: AppBundle\UserDatabaseHelper 
    arguments: 
     - "@security.token_storage" 
     - "@doctrine" 

服务类:

$manager = $this->get('app.user_database_helper')->getManager(); 
+0

这是一个好主意。非常感谢! – Adam