Добрый день?
ЛУчше в
глобале,
сессии или постоянно держать в
GET (при это вдобавок дополнительные правила в urlManager)
Понравился пример хранения языка как в данной статье:
www.elisdn.ru/blog/39/yii-based-multilanguage-site...
Но Там используется
Yii::app()->language , куда можно сохранять значение. В свойства
params из
config/main.php сохранять значения к сожалению нельзя.
Если не
глобал и не
сессия, то необходимо постоянно хранить в $_GET['tenant'] , в данном случае никуда не деться без дополнения правил, как я понял. В случае с языком, его можно было хранить в
Yii::app()->language
Вот к чему пришел:
urlManager:
'urlManager' =>return
[
'class' => 'DTenantUrlManager',
'urlFormat' => 'path',
'showScriptName' => false,
'rules' =>
[
'/' => 'hotels/index',
'<tenant:\d+>/<action:(login|logout|registration)>' => 'users/<action>',
'<tenant:\d+>/<action:(contact)>' => 'site/<action>',
'<tenant:\d+>/<controller:\w+>/<id:\d+>' => '<controller>/view',
'<tenant:\d+>/<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
'<tenant:\d+>/<controller:\w+>/<action:\w+>' => '<controller>/<action>',
'<module:\w+>/<controller:\w+>/<action:\w+>/<id:\d+>' => '<module>/<controller>/<action>/<id>',
'<module:\w+>/<controller:\w+>/<action:\w+>' => '<module>/<controller>/<action>',
],
]
DTenantUrlManager:
class DTenantUrlManager extends UrlManager
{
/** Переопределение createUrl */
public function createUrl($route, $params = [], $ampersand = '&')
{
$url = parent::createUrl($route, $params, $ampersand);
return TenantHelper::addTenantToUrl($url);
}
}
DTenantHttpRequest (определен для
request в конфиге)
class DTenantHttpRequest extends CHttpRequest
{
private $_requestUri;
public function getRequestUri()
{
/** Если запрос не получен */
if($this->_requestUri == null)
{
$this->_requestUri = TenantHelper::processTenantToUrl(parent::getRequestUri());
}
}
/** показать оригинальный URL адрес */
public function getOriginalUrl()
{
return $this->getOriginalUrl();
}
/** показать оригинальный URI адрес */
public function getOriginalRequestUri()
{
return TenantHelper::addTenantToUri($this->getRequestUri());
}
}
TenantHelper/** Процесс фирмы в адресной строке */
/** Тут затираем все лишнее и тут будут отрабатывать правила по шаблонам из UrlManager */
public static function processTenantToUrl($url)
{
$domains = explode('/', ltrim($url,'/'));
$url = '/' . implode('/',$domains);
echo $url;
return $url;
}
/** Функция добавления фирмы в налачло строки для построения url */
public static function addTenantToUrl($url)
{
$domains = explode('/', ltrim($url, '/'));
if(isset($_GET['tenant']))
$tenant = (int)$_GET['tenant'];
else
$tenant = self::getDefaultTenant();
array_unshift($domains, $tenant);
array_unshift($domains, 'tenant');
$url = '/' . implode('/',$domains);
return $url;
}
/** Фирма по умолчанию */
public static function getDefaultTenant()
{
return Yii::app()->params['tenant']['default'];
}
/** Получить id фирмы */
public static function getFirmID()
{
// echo 'getFirmID: ' .Yii::app()->request->getParam('tenant');
/** Если значение пришло из get */
if(isset($_GET['tenant']))
{
$tenant = Yii::app()->request->getParam('tenant');
}
else
{
$tenant = $_GET[1];
}
return $tenant;
/** Вывод значения из сессии */
}
Метод
getFirmID - какой то мутный( При переходе по ссылкам
DTenantHttpRequest::getRequestUri выдает желаемый -
/tenant/2/hotels/view/id/87 , но я не могу зацепить никакие get параметры из данной строки. ВИдимо потому, что там идут слэши вместо '
?' и '
&'
params:
return
[
...
'tenant' =>
[
'default' => 1,
],
...
]
<?php echo Yii::app()->createUrl('blog/view', ['id' => 1]); ?>
На входящей странице выдает желаемое
/tenant/2/blog/view/id/1 , но открывается дефолтный экшн дефолтного контроллера.
Подскажите, что мне исправить, чтобы иметь доступ к
tenant через
GET или каким либо другим способом. И почему я улетаю в дефолтный экшн?