Передача параметра в layout как правильно?

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

Передача параметра в layout как правильно?

Сообщение w4y »

В layout'e в меню есть возможность выбрать страну(dropdown), и соответствующие ссылки на поддомены.

Вопрос в том как правильно отобразить текущую страну (выбранную), пока что на ум пришло только указывать в контроллерах $this->params['country'] = выбранная страна.

В layout'e выводить $this->params['country'] установленный параметр...

Вопрос в том насколько это правильно, ну и для каждого контроллера прописывать этот параметр с поиском в БД тоже не совсем удобно?
Nerf
Сообщения: 780
Зарегистрирован: 2015.01.29, 00:37

Re: Передача параметра в layout как правильно?

Сообщение Nerf »

Если у вас поддомены, то легко можно понять страну по домену, нет? В любом случае сделайте отдельный метод для получения текущей страны (с кешированием), вызывайте по мере надобности.
caHek2x
Сообщения: 1242
Зарегистрирован: 2016.04.12, 20:41

Re: Передача параметра в layout как правильно?

Сообщение caHek2x »

виджет сделать с выбором страны ... и соответственно он же и будет подтягивать текущую страну ...
w4y
Сообщения: 46
Зарегистрирован: 2016.07.11, 07:10

Re: Передача параметра в layout как правильно?

Сообщение w4y »

Nerf писал(а): 2017.02.15, 21:13 Если у вас поддомены, то легко можно понять страну по домену, нет? В любом случае сделайте отдельный метод для получения текущей страны (с кешированием), вызывайте по мере надобности.
Вы имеете ввиду получать текущую страну по парсингу URL?
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Передача параметра в layout как правильно?

Сообщение rak »

что в поддомене? код страны?
не по парсингу url, а по настройке роутинга, поддомен - это будет просто get параметр
Nerf
Сообщения: 780
Зарегистрирован: 2015.01.29, 00:37

Re: Передача параметра в layout как правильно?

Сообщение Nerf »

w4y писал(а): 2017.02.15, 23:16 Вы имеете ввиду получать текущую страну по парсингу URL?
Сложно говорить что-то конкретно без деталей.

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

$hostMap = [
    'www.example.com' => 'ru',
    'example.com' => 'ru',
    'en.example.com' => 'en',
];
$hostName = Yii::$app->getRequest()->getHostName();
$language = ArrayHelper::getValue($hostMap, $hostName, 'ru');
Или как предложил rak.

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

'rules' => [
    'http://<language:\w+>.example.com/posts' => 'post/index',
]
Но мне не прельщает тянуть это по всем правилам.
w4y
Сообщения: 46
Зарегистрирован: 2016.07.11, 07:10

Re: Передача параметра в layout как правильно?

Сообщение w4y »

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

'rules' => [
    'http://<language:\w+>.example.com/posts' => 'post/index',
]
Ну вообще у меня на данный момент подобное правило...

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

'rules' => [
    'http://<country:\w+>.example.com/ => 'site/index',
]
А уже при выборе конкретной страны я не замечал что поддомен меняется при навигации по сайту, разумеется кроме случаев явной смены поддомена...
w4y
Сообщения: 46
Зарегистрирован: 2016.07.11, 07:10

Re: Передача параметра в layout как правильно?

Сообщение w4y »

rak писал(а): 2017.02.15, 23:54 что в поддомене? код страны?
не по парсингу url, а по настройке роутинга, поддомен - это будет просто get параметр

Контроллер:

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

 public function actionIndex($country = null)
    {
    	......
    }
Конфиг:

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

 'urlManager' => [
 ...
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'suffix' => '/',
            'rules' => [
                'http://<country:\w+>.domain.loc/' => 'site/index',
            ],
        ],
 ...

т.е. Вы предлагаете сделать виджет где получать все страны из БД и передавать в этот виджет гет параметр который и является кодом страны?
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Передача параметра в layout как правильно?

Сообщение rak »

ну если страна уже в поддомене, то почему нет?
Ответить