А я сделал следующим образом:
У меня есть таблица Url - в которой собраны все общие свойства всех страниц сайта (id, parentId, url, name_eng, name_rus, pageTitle, title, keywords, description,
где name_eng - латинское имя страницы, в зависимости от parentId строится url автоматически,
name_rus - Название страницы, именно оно выводится в меню,
а также поля, необходимые для того, чтобы вызвались необходимые controller/action и параметры, которые им необходимо передать -
route - строка вида module/controller/action,
params - сериализованный массив параметров)
Переписал модуль CUrlManager, и у меня теперь все пути ищутся в таблице Url, при нахождении вызывается необходимый route, а в $_GET помещается params.
Далее сделал себе хелпер, в котором есть статические функции, которые строят мне по этой информации меню, хлебные крошки, карту сайта и т.д. Для большего удобства управления меню я добавил в таблицу Url поле tags, в котором через пробел добавляю ключевые слова, например hide - чтобы не выводить пункт меню, и так далее, добавляя необходимые в зависимости от сайта. Таким образом все меню, хлебные крошки у меня строятся всего за два запроса к БД, планирую еще приделать своего рода кэш, чтобы можно было обходится без запросов.
И еще пока не определился как поступить с построением url. Пока в конфиге передаю своему UrlManager параметр route в котором ключ - строка вида module/controller/action, а значение - url, который вернуть, параметры будут переданы через ?. Если для строящегося url нету такого соответствия, тогда ссылка имеет вид ?route=controller/action&параметр=значение и т.д.