2011-07-13 15 views
5

Staram się ustawić trasę przyjazną dla SEO w grze! Framework, który ma wiele parametrów (drugi parametr jest opcjonalny). Co mam nastawione na to:
Zagraj w routing w ramce z wieloma parametrami

 
http://domain.com/article/jsmith/name-of-article 

Ale co Play jest generowanie jest:

 
http://domain.com/article/jsmith?articleSlug=name-of-article 

Moim zdaniem: @{Article.show("jsmith","name-of-article")}

mojego kontrolera
public static void show(String username,String articleSlug){ ... }

Moje trasy złożyć

 
GET /article/{username}     Article.show 
GET /article/{username}/{articleSlug} Article.show 

Odpowiedz

3

Wydaje szablon jest zgodne z pierwszej trasy. Odwrócenie zamówienia będzie skuteczne, Również kontroler, aby zaakceptować nazwę użytkownika i artykułSlug.

show(username, articleSlug){} 
0

udało mi się osiągnąć to, czego szukasz, stosując następujące odwzorowania:

trasach:

GET  /{<[0-9]+>id}/{slug}   Listing.show 
GET  /{<[0-9]+>id}     Listing.show 

musi istnieć dwa metody kontrolera dla tej pracy:

public static void show(Long id, String slug) { /* ... */ } 
public static void show(Long id) { /* ... */ } 

i to może być wykorzystane z myślą:

#{a @Listing.show(item.id, item.title.slugify())}link title#{/a} 
#{a @Listing.show(item.id)}link title#{/a} 
+0

Może item.title.slugify() nie jest interpretowany przez nieznanego powodu ... nie spróbować utworzyć zmienną przed zawierający var ślimak = item.title.slugify(), a następnie ? – mandubian

+1

Twój pierwszy szablon bierze twoją drugą trasę. W przypadku drugiego szablonu, czy masz pasujący kontroler, tj. show (id, slug)? – sojin

+0

Tak! Brak tej drugiej metody kontrolera. Myślałem, że jest na to tolerancyjny i po prostu nie używa drugiego parametru. –