環境

2016-02-29 54 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