2013-03-17 2 views
1

Je suis en train de mettre en place des itinéraires dans mon application telle que:Compojure: numéro d'itinéraire Nested

  • /: locale/-> Accueil, avec locale de liaison
  • /: locale/Recherche -> Recherche , avec le code de liaison locale

jusqu'à présent, mon routage est:

(defn controller-routes [locale] 
    (home/c-routes locale) 
    (search/c-routes locale))) 


(defroutes app-routes 
    (route/resources "/") 
    (context "/:locale" [locale] 
    (controller-routes locale)) 
    no-locale-route 
    (route/not-found "Not Found")) 

recherche/c-routes:

(defn c-routes [locale] 
(GET "/search" [] (index locale))) 

maison/c-routes:

(defn c-routes [locale] 
    (GET "/" [] (index locale))) 

Je ne comprends pas pourquoi cela ne fonctionne pas correctement, mais actuellement "/ uk/Recherche /" correspond correctement, mais «/uk/"donne la page 404.

Toute aide serait appréciée. Merci.

Répondre

4

controller-routes est une fonction normale qui, comme de revient maintenant la dernière route i.e. recherche et donc rechercher uniquement des œuvres. Qu'est-ce que vous avez besoin est faire controller-routes un itinéraire à l'aide defroutes et en changeant les c-routes ainsi:

recherche/c-voies:

(def c-routes (GET "/search" [locale] (index locale))) 

home/c-voies:

(def c-routes (GET "/" [locale] (index locale))) 

Où vous utilisez les itinéraires ci-dessus:

(defroutes controller-routes 
    home/c-routes 
    search/c-routes) 


(defroutes app-routes 
    (route/resources "/") 
    (context "/:locale" [locale] 
    controller-routes) 
    no-locale-route 
    (route/not-found "Not Found")) 
+0

Fonctionne comme un charme - merci. Les deux c-routes devraient être des débris, cependant, non? –

+0

'defroutes' est de composer plusieurs itinéraires en un seul gestionnaire dire soit l'un des gestionnaire réussira, les c-routes sont des gestionnaires individuels donc définis à l'aide' GET', mais quand vous les composez alors vous utilisez 'defroutes' comme cela se fait dans cas de contrôleur-routes – Ankur

+0

Je vois. Mais que se passe-t-il si je veux avoir plusieurs routes dans l'une de mes routes c? Pourrais-je les emballer avec une liste? –