Я разрабатываю веб-приложение с Clojure, в настоящее время с Ring, Усы, Песчаная отмельи Иккинг. У меня есть ресурс с именем 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 шага)
. Мне не нравится эта жестко запрограммированная "/job/"
часть URL-адреса, потому что она повторяет то, что я определил в маршруте усов; если я изменю маршрут, мне нужно будет изменить мой контроллер, который является более тесной связью, чем я забочусь.
Я знаю, что в системе маршрутизации Rails есть методы для генерации URL-адресов из параметров, и мне хотелось бы, чтобы у меня была аналогичная функциональность, т.е. мне хотелось бы, чтобы у меня была функция url-for
, которую я мог бы вызывать следующим образом:
(url-for :job 32 "foo" "bar")
; => "/job/32/foo/bar"
Существует ли веб-фреймворк Clojure, который упрощает эту задачу? Если нет, что вы думаете о том, как это можно реализовать?