symfony2多数据库登录或按主机更改数据库


symfony2 Multidatabase login or change database by host

在symfony2和fosuserbundle(或内部)中可以使其成为:

当我通过主机example.com进入网站时,我选择"example"数据库,然后我就可以登录到这个数据库中的用户。当我通过主机exaple2.com进入网站时,我选择"exaple2"数据库,那里有其他用户和数据。

两个主机的路由我想有相同的。

编辑:

我现在用MongoDB尝试一下。我可以为一个数据库创建用户,但由于它抛出"无效凭据"而无法登录。

配置:

doctrine_mongodb:
    connections:
        pl:
            server: mongodb://localhost:27017
        en:
            server: mongodb://localhost:27017
    document_managers:
        pl:
            connection: pl
            mappings:
                AcmeBundle: ~
                FOSUserBundle: ~
        en:
            connection: en
            mappings:
                AcmeBundle: ~
                FOSUserBundle: ~

请求侦听器

class RequestListener
{
protected $dm;
public function setDmManager(ObjectManager $dm)
{
   $this->dm = $dm;
}
public function onKernelRequest(GetResponseEvent $event)
{
        $dbname = $event->getRequest()->getLocale();
        $this->dm->getConfiguration()->setDefaultDB($dbname);
}
}

是的,使用像OnKernelRequest这样的事件监听器是非常可行的,我有一个应用程序可以在MongoDB中做到这一点。

我根据域为每个DB命名&子域(即:论坛mysite)

然后我在OnKernelRequest上使用事件侦听器来获取主机名,并将其分解&加载适当的数据库。这些线路应该会有所帮助:

    $request = $event->getRequest();
    $currentHost = $request->getHttpHost();

也就是说,要获取主机,则需要对其进行解析(使用explode()等)以获取数据库名称。

$this->dm->getConfiguration()->setDefaultDB($dbname);

也就是说切换DB,但$this->dm是mongoDB的DocumentManager,所以SQL和EntityManager可能不同,您必须查找合适的方法。

希望这能有所帮助。