tipugin
(Tipugin)
1
Предположим, нужно для залогиненного пользователя подставлять название его компании перед всеми остальными частями роута. Роут такой:
'<company:\w+>/<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>'
Значание company хранится в сессии. Как автоматизировать подстановку этого параметра в строку урла (и делать это только если залогинен пользователь)?
raa
(Rudenkosasha)
2
сразу что пришло в голову продублировать правила ссылок с компанией.
не очень красиво, но работать будет. если есть компания, прописывать ее в параметрах, если нет, то будут ссылки без компании.
а не лучше вынести компанию в домен типа company-name.mysite.com
Psih
(Arvids Godjuks)
3
Переопределите createUrl и createAbsoluteUrl и опишите там автоматическую подстановку нужного параметра.
У нас к примеру сайт мультиязычный и что бы язык всегда подставлялся что бы урлы имели вид http://site.com/en/… http://site.com/ru/… сделано вот так:
<?php
class ELangCUrlManager extends CUrlManager {
public function createUrl($route, $params = array(), $ampersand = '&') {
if (!isset($params['lang'])) {
$params['lang'] = Yii::app()->GetLanguage();
}
if ($params['lang'] == 'en_us') {
$params['lang'] = 'en';
}
return parent::createUrl($route, $params, $ampersand);
}
}
tipugin
(Tipugin)
4
Спасибо, тоже думал про переопределение createUrl, но в итоге пришел к субдоменам =)