symfony2 Вход в несколько баз данных или изменение базы данных по хосту

0

В 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);

}
}
Теги:
fosuserbundle

1 ответ

1
Лучший ответ

Да, это вполне выполнимо с помощью Слушателей Службы, таких как OnKernelRequest, у меня есть приложение, которое делает это только с MongoDB.

Я называю каждую БД в соответствии с доменом и субдоменом (то есть: forums-mysite)

Затем я использую прослушиватель событий OnKernelRequest, чтобы получить имя хоста, сломать его и загрузить соответствующую базу данных. Эти строки должны помочь:

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

То есть, чтобы получить хост, вам нужно проанализировать его (с помощью explode() или такого), чтобы получить имя базы данных.

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

То есть для переключения БД, но $this->dm является DocumentManager для mongoDB, поэтому он может быть другим для SQL и EntityManager, вам придется искать подходящий метод.

Надеюсь это немного поможет.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню