У меня есть такие правила для urlManager:
Код: Выделить всё
// ...
'urlManager' => array (
'urlFormat' => 'path',
'showScriptName' => FALSE,
'rules' => array (
'catalog' => 'catalog/lots',
'catalog/<page:\d+>' => 'catalog/lots',
'catalog/categories' => 'catalog/categories',
'catalog/categories/<page:\d+>' => 'catalog/categories',
'catalog/category/<category:\d+>' => 'catalog/lots',
'catalog/category/<category:\d+>/<page:\d+>' => 'catalog/lots',
'catalog/category/<category:\d+>/brand/<brand:\d+>' => 'catalog/lots',
'catalog/category/<category:\d+>/brand/<brand:\d+>/<page:\d+>' => 'catalog/lots',
'catalog/brands' => 'catalog/brands',
'catalog/brands/<page:\d+>' => 'catalog/brands',
'catalog/brand/<brand:\d+>' => 'catalog/lots',
'catalog/brand/<brand:\d+>/<page:\d+>' => 'catalog/lots',
'catalog/lot/<lot_id:\d+>' => 'catalog/lot'
)
)
// ...
Код: Выделить всё
echo $this->controller->createUrl('catalog/lots', array('category' => 2, 'brand' => 23, 'page' => 3));
Исходя из этого, попробовал отсортировать массив правил по количеству параметров по убыванию:
Код: Выделить всё
// ...
'urlManager' => array(
'urlFormat' => 'path',
'showScriptName' => FALSE,
'rules' => array(
'catalog/category/<category:\d+>/brand/<brand:\d+>/<page:\d+>' => 'catalog/lots',
'catalog/category/<category:\d+>/brand/<brand:\d+>' => 'catalog/lots',
'catalog/category/<category:\d+>/<page:\d+>' => 'catalog/lots',
'catalog/category/<category:\d+>' => 'catalog/lots',
'catalog/brand/<brand:\d+>/<page:\d+>' => 'catalog/lots',
'catalog/brand/<brand:\d+>' => 'catalog/lots',
'catalog/<page:\d+>' => 'catalog/lots',
'catalog' => 'catalog/lots',
'catalog/brands' => 'catalog/brands',
'catalog/brands/<page:\d+>' => 'catalog/brands',
'catalog/lot/<lot_id:\d+>' => 'catalog/lot'
)
)
// ...
А теперь суть вопроса. Что это? Ошибка моей версии Yii? В русской документации неверно описана работа с urlManager? Или в ней забыли описать какой-нибудь параметр, который заставил бы createUrl учитывать переданные параметры при поиске нужного шаблона?