Вам просто хелпер для вьюх нужно написать, что-то типа article_url_for.
В Sinatra это можно сделать как-то так:
helpers do
def article_url_for(id)
# тут уже напишете выборку объекта из базы или кэша и формирование url
end
end
В Sinatra нет генератора url, потому что там контроллеры как таковые отсутствуют. Т.е. если у вас в Yii есть роуты вида
'/<categoryName:\\w+>/<articleSlug:\\w+>' => "articles/read"
'/<id:\\d+>' => "articles/read"
то вы можете написать экшн в виде
function actionRead(id = null, categoryName = null, articleSlug = null){
if(!empty(id))
article = Article::model()->findByPk(id)
else
article = Article::model()->findByAttributes(..)
}
И генерировать урлы:
$this->createUrl('articles/read', array('categoryName' => 'Books', 'slug' => 'Another-great-book')) //сгенерирует url первого вида
$this->createUrl('articles/read', array('id' => 123)) //сгенерирует url второго вида
Для того, чтобы генерировать url первого вида, передавая id объекта, вам в Yii все равно придется писать хелпер, который вытащит объект из базы и сгенерирует url стандартным способом, передав туда соотв. параметры.