Задать вопрос
@kuznecov85

Yii2. Почему не работает Yii::$app->request->hostInfo?

Добрый день.
Есть сайт https://reu-rating.ru/, он даже работает :)
Но, когда переключается язык (ссылка в подвале сайта), появляется ошибка
5a0aac238fa63335485427.png

При этом, если кликнуть в адресную строку и нажать Enter, язык переключается и сайт работает с выбранным языком.

Код /common/modules/languages/models/LanguageKsl.php :

<?php
namespace common\modules\languages\models;
use Yii;
class LanguageKsl
{
    static $list; //строка вида ru|en|
    /*
     * Преобразование к строке вида ru|en|
     * для использования в регулярных выражениях
     */
    public static function list_languages(){
        if(!self::$list){
            $languages = Yii::$app->getModule('languages')->languages;
            $list = '';
            array_walk($languages, function ($value) use (&$list){
                $list .= $value . '|';
            });
            self::$list = $list;
        }

        return self::$list;
    }


    /**
    * Создает URL с меткой языка
    * Разбивает URL на подмассив $match_arr
    * 0. http://site.loc/ru/contact
    * 1. http://site.loc
    * 2. ru или en
    * 3. остальная часть
    */
    public static function parsingUrl($language, $url_referrer){

        $list_languages = self::list_languages(); //список языков
        $host = Yii::$app->request->hostInfo;

        preg_match("#^($host)/($list_languages)(.*)#", $url_referrer, $match_arr);
        //preg_match("#^(https://reu-rating.ru)/($list_languages)(.*)#", $url_referrer, $match_arr);

        //добавляем разделитель
        if (isset($match_arr[3]) && !empty($match_arr[3]) && !preg_match('#^\/#', $match_arr[3])){
            $separator = '/';
        } else {
            $separator = '';
        }


        $default_language = Yii::$app->getModule('languages')->default_language;
        $show_default = Yii::$app->getModule('languages')->show_default;

        //Удаляем основной язык из URL, если в настройках выбрано "не показывать"
        if($language == $default_language && !$show_default){
            $match_arr[2] = null;
        } else {
            $match_arr[2] = '/'.$language.$separator;
        }

        // создание нового URL
        $url = $match_arr[1].$match_arr[2].$match_arr[3];
        return $url;
    }
}


Возможно проблема в  .htaccess или туда лучше вообще не лезть?
На всякий случай обращаю внимание, что сайт работает на https.
  • Вопрос задан
  • 588 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы