Я разрабатываю веб-приложение с Clojure, в настоящее время с Ring , Усы , Sandbar и Hiccup . У меня есть ресурс с именем job и маршрут для отображения определенного шага в многоэтапной форме для определенного задания, определенного следующим образом (другие маршруты для простоты опущены):
(def web-app
(moustache/app
;; matches things like "/job/32/foo/bar"
:get [["job" id & step]
(fn [req] (web.controllers.job/show-job id step))]))
В представлении, отображаемом моим контроллером, есть ссылки на другие шаги в том же задании. На данный момент эти URL создаются вручную, например, (str "/job/" id step)
. Мне не нравится эта жестко запрограммированная "/job/"
часть URL, потому что она повторяет то, что я определил в маршруте усов; если я изменяю маршрут, мне нужно сменить контроллер, который крепче, чем мне нужно.
Я знаю, что в системе маршрутизации Rails есть методы для генерации URL-адресов из параметров, и мне бы хотелось, чтобы у меня была похожая функциональность, т. Е. Хотелось бы, чтобы у меня была функция url-for
, которую я мог бы вызывать так:
(url-for :job 32 "foo" "bar")
; => "/job/32/foo/bar"
Существует ли веб-инфраструктура Clojure, которая делает это простым? Если нет, что вы думаете о том, как это может быть реализовано?