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

时间:2015-02-17 22:30:46

标签: php symfony fosuserbundle

可以在symfony2和fosuserbundle(或内部)中创建它:

当我通过主机example.com进入网站时,我选择"示例"数据库,然后我可以登录到这个数据库中的用户。当我通过主机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);

}
}

1 个答案:

答案 0 :(得分:1)

是的,使用类似OnKernelRequest的Event Listeners是非常可行的,我有一个应用程序可以使用MongoDB。

我根据域和名称命名每个数据库。子域名(即:forums-mysite)

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

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

那是为了获取主机,然后你需要解析它(用explode()或者这样)来获取数据库名称。

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

那就是切换数据库,但是$this->dm是mongoDB的DocumentManager所以对于SQL和EntityManager来说它可能不同,你必须查找相应的方法

希望这有点帮助。