2011-07-13 5 views
5

मैं Play में एक एसईओ दोस्ताना मार्ग स्थापित करने की कोशिश कर रहा हूं! फ्रेमवर्क जिसमें एकाधिक पैरामीटर हैं (दूसरे पैरामीटर के साथ वैकल्पिक)। क्या मैं के लिए लक्ष्य कर रहा हूँ है:
एकाधिक पैरामीटर के साथ फ्रेमवर्क रूटिंग चलाएं

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

लेकिन क्या प्ले पैदा कर रहा है है:

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

मेरी नजर में: @{Article.show("jsmith","name-of-article")}

मेरे नियंत्रक
public static void show(String username,String articleSlug){ ... }

मेरे मार्ग फ़ाइल

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

उत्तर

3

लगता है अपने टेम्पलेट पहले मार्ग के साथ मिलान किया जाता है। ऑर्डर को रिवर्स करने से चाल चल जाएगी,

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

आपके नियंत्रक को उपयोगकर्ता नाम और आलेख स्लॉग स्वीकार करने के लिए भी है।

show(username, articleSlug){} 
0

मैं प्राप्त कर ली है क्या आप निम्नलिखित मैपिंग प्रयोग करने के लिए देख रहे हैं:

मार्गों:

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

वहाँ दो इस काम करने के लिए नियंत्रक तरीकों होना चाहिए:

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

और फिर इसे एक दृश्य से इस्तेमाल किया जा सकता:

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

शायद item.title.slugify() किसी अज्ञात कारण से व्याख्या नहीं की है ... आप वर स्लग युक्त से पहले एक चर बनाने का प्रयास किया था = item.title.slugify() और फिर ? – mandubian

+1

आपका पहला टेम्पलेट अपना दूसरा मार्ग ले रहा है। दूसरे टेम्पलेट के लिए, क्या आपके पास एक मिलान नियंत्रक है यानी। शो (आईडी, स्लग)? – sojin

+0

हां! वह दूसरी नियंत्रक विधि गायब थी। मैं सोच रहा था कि यह सहनशील है और केवल दूसरे पैरामीटर का उपयोग नहीं करता है। –