Symfony одно приложение нескольких поддоменов - PullRequest
0 голосов
/ 24 апреля 2018

Я перенаправил весь трафик на мой основной домен, скажем, www.example.com, и моя первая страница www.example.com/login, поэтому любая запись в поддомене будет перенаправлена ​​на основной домен, поэтому something.example.com/login окажется на той же странице, что иwww.example.com/login (но поддомен останется в URL).Причина, по которой я это делаю, заключается в том, что у меня есть несколько «клиентов» и «пользователей», каждый пользователь отвечает за одного или нескольких клиентов, и все они настроены в базе данных и работают отлично, поэтому я могу войти в систему с помощью user1. Я посмотрю некоторые задачи для user1.на client1 и когда я захожу с user2, я вижу задачи от user2 на client2 и т. д. *

Теперь мне нужно сделать еще одну вещь, чтобы она выглядела немного лучше, когда кто-то открывает example.com и входит в системус учетными данными user1 я хочу, чтобы он был перенаправлен на client1.example.com, и в то же время, когда кто-то открывает client1.example.com, я хочу, чтобы он увидел логотип этого клиента.

Все запросы к базе данных идругие проблемы с входом обрабатываются, но я сталкиваюсь с парой проблем:

  • как перенаправить на правильный клиент (поддомен)?
  • и наоборот, если (супер администратор) пользователь, которыйотвечает за управление клиентами и пользователями, входит в систему, как перенаправить его на основной домен (example.com) без?

Еще одна проблема, но я думаю,это будет решено, когда я смогу решить другие проблемы, когда пользователь управляет более чем одним клиентом, я хочу дать ему возможность переключать клиентов, например, user1, есть меню для переключения на client1 или client2, но любое перенаправление, которое я делаю, - это регистрацияпользователь вышел.как я могу поддерживать сеанс с этой функцией?

ps, когда разные пользователи регистрируются в цветах (темы) и логотипы приложения, которые вызываются из базы данных в соответствии с клиентом, и именно поэтому мне нужно прочитать поддоменна первой странице, чтобы я мог изменить login logo в соответствии с поддоменом

, это часть моего кода, чтобы увидеть, как я этого добиваюсь, если кому-то интересно

$currentUrl =  $request->getHttpHost();
$baseUrl = $this->container->getParameter('base_url');
$subdomain = str_replace('.'.$baseUrl, '',$currentUrl);
if (sizeof($user->getClients()) > 0) {
                $filter = $this->em->getFilters()->enable(Utils::CLIENT_FILTER_NAME);
                if ($user->getLastLoggedInClient() !== null) {
                    $client = $user->getLastLoggedInClient();
                } else {
                    $client = $user->getClients()->first();
                }
                if ($client == null) {
                    throw new ClientNotFoundException();
                }
                if(!$client->isActive()){
                    throw new ClientNotActiveException();
                }
                $this->session->set(Utils::CLIENT_ID_NAME, $client->getId());
                $this->session->set('client', $client);
                $filter->setParameter(Utils::CLIENT_ID_NAME, $client->getId());
                $user->setLastLoggedInClient($client);
                $this->em->persist($user);
                $this->em->flush();
            }
            else{
                return new RedirectResponse('/logout');
            }
            return new RedirectResponse('/');

, такя думаю где-то здесь return new RedirectResponse('/'); мне нужно перенаправить на правильный поддомен.

Спасибо!

1 Ответ

0 голосов
/ 24 апреля 2018

Когда вы впервые понимаете, что пользователь должен войти в систему (с client1.example.com), поместите URL-адрес или клиентское имя «client1» в сеанс, доступный для чтения на www.example.com, или добавьте его в URL (например, https://www.example.com/login/to/client1 - маршрут будет '/login/to/{clientname}') или, проще, /login?clientname=client1.

Когда пользователь вошел в систему и был подтвержден, что он является участником «client1», тогда перенаправление будет к маршруту, подобному 'client_app_dashboard', ['clientname' => 'client1'] - и определению маршрута @Route("/", name="client_app_dashboard", host="{clientname}.example.com")

В документации Symfony есть информация о Как сопоставить маршрут на основе хоста .

Что касается логотипа - он будет выбран и отображен на основе $clientname на www. домашняя страница.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...