2011-07-13 17 views
5

¡Estoy tratando de configurar una ruta de SEO amigable en Play! Marco que tiene múltiples parámetros (siendo el 2º parámetro opcional). Lo que estoy apuntando es:
Jugar enrutamiento de Framework con múltiples parámetros

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

Pero lo que está generando es Juego:

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

En mi punto de vista: @{Article.show("jsmith","name-of-article")}

Mi controlador
public static void show(String username,String articleSlug){ ... }

Mis rutas presentar

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

Respuesta

3

Parece que su plantilla es coincidente con la primera ruta. Invirtiendo el orden hará el truco,

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

también tienen su controlador para aceptar nombre de usuario y articleSlug.

show(username, articleSlug){} 
0

He conseguido lo que busca usando las siguientes asignaciones:

rutas:

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

debe haber dos métodos de controlador para que esto funcione:

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

y luego puede ser usado desde un punto de vista:

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

tal vez el item.title.slugify() no es interpretado por una razón desconocida ... ¿trató de crear una variable que contiene antes de babosa var = item.title.slugify() y después ? – mandubian

+1

su primera plantilla está tomando su segunda ruta. Para la segunda plantilla, ¿tiene un controlador correspondiente, es decir. show (id, slug)? – sojin

+0

¡Sí! Ese segundo método de control faltaba. Estaba pensando que es tolerante con esto y simplemente no usa el segundo parámetro. –

Cuestiones relacionadas