2013-04-30 11 views
8

में freeform प्राप्त URL पैरामीटर हैंडलिंग चलो कहते हैं कि मैं एक कार्रवाई है कि वैकल्पिक रूप से दो पैरामीटर स्वीकार करते हैं:प्ले 2 मार्ग

def foo(name: String, age: Integer) = Action { 
    // name & age can both be null if not passed 
} 

मैं कैसे सेटअप निम्नलिखित कॉल वाक्यविन्यास से किसी के साथ काम करने के लिए मेरी route फ़ाइल कार्य करें:

इस के लिए सही सिंटैक्स
/foo 
/foo?name=john 
/foo?age=18 
/foo?name=john&age=18 
/foo?authCode=bar&name=john&age=18 // The controller may have other implicit parameters 

क्या है?

+0

बहुत ज्यादा http के साथ संबंधित: // stackoverflow .com/प्रश्न/9657163/कैसे करने वाली संभाल-वैकल्पिक-क्वेरी-पैरामीटर-इन-प्ले-ढांचा –

उत्तर

17

कुछ इस तरह काम करना चाहिए:

GET /foo   controllers.MyController.foo(name: String ?= "", age: Int ?= 0) 

के बाद से अपने मानकों को दूर छोड़ दिया जा सकता है कि आप उनके लिए डिफ़ॉल्ट मान प्रदान करने के लिए (और नियंत्रक समारोह में उन मूल्यों को संभाल) की जरूरत है।

आप एक अंतर्निहित अनुरोध में नियंत्रक में अन्य वैकल्पिक पैरामीटर का उपयोग करने के लिए यदि आप गुजरती हैं और का उपयोग getQueryString पैरामीटर में सक्षम होना चाहिए (प्ले 2.1.0 में जोड़ा मुझे लगता है कि):

def foo(name: String, age: Integer) = Action { implicit request => 
    val authCode: Option[String] = request.getQueryString("authCode") 
    ... 
} 

करने के लिए एक अच्छा तरीका है

def foo = Action { implicit request => 
    val nameOpt: Option[String] = request.getQueryString("name") 
    val ageOpt: Option[String] = request.getQueryString("age") 
    ... 
} 

अद्यतन: 2.1.1 के लिए current docs का एक सा कर रहे हैं यह सिर्फ नियंत्रक मापदंडों के बाहर अपने वैकल्पिक नाम और उम्र लेने के लिए और क्वेरी स्ट्रिंग से सब कुछ निकालने के लिए हो सकता है है इस बारे में च (मुद्दा # 776 के साथ तय हो गई के बाद से), लेकिन यह एक और है (और सबसे अच्छा, IMHO) विकल्प:

GET /foo controllers.MyController.foo(name: Option[String], age: Option[Int]) 

और ...

def foo(name: Option[String], age: Option[Int]) = Action { implicit request => 
    Ok(s"Name is: $name, age is $age") 
} 
संबंधित मुद्दे