В symfony2 и fosuserbundle (или внутреннем) можно сделать это:
Когда я вхожу на сайт с помощью host example.com, я выбираю базу данных "example", а затем могу войти в систему для пользователя в этой базе данных. Когда я вхожу на сайт хостом exaple2.com, я выбираю базу данных "exaple2", где находятся другие пользователи и данные.
Маршрутизация для обоих хостов Я хочу иметь то же самое.
Редактировать:
Я сейчас пытаюсь это сделать с MongoDB. Я могу создать пользователя для одной базы данных, но не могу войти, потому что он бросает "Недопустимые учетные данные".
Config:
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.
Я называю каждую БД в соответствии с доменом и субдоменом (то есть: forums-mysite)
Затем я использую прослушиватель событий OnKernelRequest, чтобы получить имя хоста, сломать его и загрузить соответствующую базу данных. Эти строки должны помочь:
$request = $event->getRequest();
$currentHost = $request->getHttpHost();
То есть, чтобы получить хост, вам нужно проанализировать его (с помощью explode()
или такого), чтобы получить имя базы данных.
$this->dm->getConfiguration()->setDefaultDB($dbname);
То есть для переключения БД, но $this->dm
является DocumentManager
для mongoDB, поэтому он может быть другим для SQL и EntityManager
, вам придется искать подходящий метод.
Надеюсь это немного поможет.