2011-01-15 3 views
6

J'utilise playframework, et j'espère générer des URL complexes comme stackoverflow. Par exemple, je veux générer une url de question:Comment générer une URL complexe comme stackoverflow?

http://aaa.com/questions/123456/How-to-generator-a-complex-url 

Notez la dernière partie, il est le titre de la question.

Mais je ne sais pas comment le faire.

MISE À JOUR

Dans le play framework, nous pouvons définir des itinéraires dans le fichier conf/routes, et ce que je fais est:

GET /questions/{<\d+>id} Questions.show

De cette façon, lorsque nous appelons @{Questions.show(id)} en vue, il va générer:

http://aaa.com/questions/123456

Mais comment laisser le généré a le titre est difficile.

Répondre

11

Avec playframework, il est facile de générer une telle URL. Dans vos itinéraires vous déposer ajoutez ceci:

GET /questions/{id}/{title}  YourController.yourMethod 

Voir la doc dans le site play framework sur le routage pour plus d'informations

Dans votre page html:

<a href="@{YourController.yourMethod(id,title.slugify())}"> 

slugify de JavaExtensions, nettoyer votre titre à partir de caractères réservés (see doc)

2

C'est un réécriteur url côté serveur. Dans le cas de SO, peu importe que vous tapez {...}/questions/4698625/how-to-generate-complex-url-like-stackoverflow ou {...}/questions/4698625 - ils redirigent tous les deux vers le même contenu. Donc ce postfix est utilisé juste pour augmenter la lisibilité d'une URL.

Pour plus de détails sur la réécriture d'URL, voir this post.

UPD: pour produire un tel Postfix,

  1. prendre un titre du contenu,
  2. psy multiples espaces blancs en simple
  3. remplacer tous les espaces blancs avec le tiret (-)
  4. supprimer tous les symboles autres que des lettres d'un titre

Mieux effectuer ces opérations avec des expressions régulières

+0

merci, mais la partie difficile est de savoir comment le faire dans playframework. – Freewind

+0

@Freewind, désolé, mal lu à propos de playframework – Genius

Questions connexes