Доброй ночи всем!
Пока только изучаю данный фреймворк, столкнулся с такой задачей, что не совсем понимаю где правильно написать следующий процесс.
Пишу сайт, контент которого зависит от выбранного города (поддомена) - тут все настроено и работает.
Если обращаться к сайту без указания поддомена, то он перебросит вас на страницу выбора города и после сохранит выбор в куках, чтобы в следующий раз при запросе к сайту он сразу переадресовывал на нужный город.
Так вот сам вопрос, где правильно вставить код, который будет проверять сохранен ли в куках город и переадресовывать на нужный url? Логично, что это нужно реализовать при запуске приложения, но не могу до конца разобраться в структуре.
Сильно не пинайте. Заранее спасибо за ответы!
Работа с автоподдоменами
-
- Сообщения: 2
- Зарегистрирован: 2019.10.31, 01:18
-
- Сообщения: 910
- Зарегистрирован: 2019.08.13, 01:49
Re: Работа с автоподдоменами
в конфиге
Код: Выделить всё
'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);
}
},
-
- Сообщения: 2
- Зарегистрирован: 2019.10.31, 01:18
Re: Работа с автоподдоменами
Спасибо за направление!)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;
Спасибо еще раз!