symfony2 多数据库登录或通过主机更改数据库
symfony2 Multidatabase login or change database by host
在 symfony2 和 fosuserbundle(或内部)中可以做到:
当我通过主机example.com进入站点时,我选择"example"数据库,然后我可以登录到这个数据库中的用户。当我通过主机 exaple2.com 进入站点时,我选择 "exaple2" 其他用户和数据所在的数据库。
两个主机的路由我想要相同的。
编辑:
我现在正在尝试 MongoDB。我可以为一个数据库创建用户但无法登录,因为它抛出 "Invalid credentials".
配置:
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);
}
}
是的,使用 Event Listeners 非常可行,比如 OnKernelRequest,我有一个应用程序可以使用 MongoDB。
我根据域和子域命名每个数据库(即:forums-mysite)
然后我在 OnKernelRequest 上使用事件侦听器来获取主机名,将其分解并加载适当的数据库。这些行应该有所帮助:
$request = $event->getRequest();
$currentHost = $request->getHttpHost();
也就是获取host,然后需要解析(用explode()
之类的)得到数据库名
$this->dm->getConfiguration()->setDefaultDB($dbname);
就是切换DB,但是$this->dm
是mongoDB的DocumentManager
所以SQL和EntityManager
可能不一样,你必须查找合适的方法。
希望对您有所帮助。
在 symfony2 和 fosuserbundle(或内部)中可以做到:
当我通过主机example.com进入站点时,我选择"example"数据库,然后我可以登录到这个数据库中的用户。当我通过主机 exaple2.com 进入站点时,我选择 "exaple2" 其他用户和数据所在的数据库。
两个主机的路由我想要相同的。
编辑:
我现在正在尝试 MongoDB。我可以为一个数据库创建用户但无法登录,因为它抛出 "Invalid credentials".
配置:
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);
}
}
是的,使用 Event Listeners 非常可行,比如 OnKernelRequest,我有一个应用程序可以使用 MongoDB。
我根据域和子域命名每个数据库(即:forums-mysite)
然后我在 OnKernelRequest 上使用事件侦听器来获取主机名,将其分解并加载适当的数据库。这些行应该有所帮助:
$request = $event->getRequest();
$currentHost = $request->getHttpHost();
也就是获取host,然后需要解析(用explode()
之类的)得到数据库名
$this->dm->getConfiguration()->setDefaultDB($dbname);
就是切换DB,但是$this->dm
是mongoDB的DocumentManager
所以SQL和EntityManager
可能不一样,你必须查找合适的方法。
希望对您有所帮助。