Работа с автоподдоменами

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Закрыто
TornadoPro
Сообщения: 2
Зарегистрирован: 2019.10.31, 01:18

Работа с автоподдоменами

Сообщение TornadoPro »

Доброй ночи всем!
Пока только изучаю данный фреймворк, столкнулся с такой задачей, что не совсем понимаю где правильно написать следующий процесс.

Пишу сайт, контент которого зависит от выбранного города (поддомена) - тут все настроено и работает.
Если обращаться к сайту без указания поддомена, то он перебросит вас на страницу выбора города и после сохранит выбор в куках, чтобы в следующий раз при запросе к сайту он сразу переадресовывал на нужный город.

Так вот сам вопрос, где правильно вставить код, который будет проверять сохранен ли в куках город и переадресовывать на нужный url? Логично, что это нужно реализовать при запуске приложения, но не могу до конца разобраться в структуре.

Сильно не пинайте. Заранее спасибо за ответы!
yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: Работа с автоподдоменами

Сообщение yiiliveext »

в конфиге

Код: Выделить всё

'on beforeRequest' => function ($event) {
        $cookies = Yii::$app->getRequest()->cookies;
        if ($cookies->has('city')) {
            $city = $cookies->getValue('city');
            $host = Yii::$app->getRequest()->getAbsoluteUrl();
            $url = parse_url($host, PHP_URL_SCHEME) . '://' . $city . '.' . parse_url($host, PHP_URL_HOST);
            Yii::$app->getResponse()->redirect($url);
        }
    },
TornadoPro
Сообщения: 2
Зарегистрирован: 2019.10.31, 01:18

Re: Работа с автоподдоменами

Сообщение TornadoPro »

yiiliveext писал(а): 2019.10.31, 15:39 в конфиге

Код: Выделить всё

'on beforeRequest' => function ($event) {
        $cookies = Yii::$app->getRequest()->cookies;
        if ($cookies->has('city')) {
            $city = $cookies->getValue('city');
            $host = Yii::$app->getRequest()->getAbsoluteUrl();
            $url = parse_url($host, PHP_URL_SCHEME) . '://' . $city . '.' . parse_url($host, PHP_URL_HOST);
            Yii::$app->getResponse()->redirect($url);
        }
    },
Спасибо за направление!)
Все выполняется на всех страничках и в начале загрузки, но после выполнения, код ждал выполнение контроллера.
Например, у меня при обращении на 'domen.ru/' задействуется SiteController, где поддомен определяет город и вытаскивает информацию из БД. Так вот, если перейти на 'domen.ru/', то появится ошибка БД поскольку он не может определить город. Можно было, конечно, в каждом контроллере проверять существование поддомена, но хотелось бы в одном месте сделать этот функционал и забыть.

Помог 'on beforeAction' и когда нужно обрубить после этого кода все остальное, то ставим свойство $event->isValid = false;


Спасибо еще раз!
Закрыто