2012-08-24 12 views
7

मैं आवेदक रूपों को ग्रोक करने की कोशिश कर रहा हूं, और मैं सोच रहा हूं कि किसी ऐसे फॉर्म को कैसे कार्यान्वित किया जाए जो अन्य क्षेत्रों पर निर्भर फ़ील्ड को मान्य करे। उदाहरण के लिए एक पंजीकरण फॉर्म जिसमें password और confirm_password फ़ील्ड हैं और मैं password == confirm_password को सत्यापित करना चाहता हूं।कई क्षेत्रों में फैले सत्यापन

हैंडलर में फॉर्म के चलने के बाद किया जा सकता है, लेकिन इसका मतलब है कि त्रुटि संदेश खोना।

संपादित करें: उल्लेख करने के लिए, मैं मुख्य रूप से Yesods अनुप्रयोगी रूपों का उपयोग कर रहा हूँ भूल है, लेकिन वे काफी पाचन-functors

उत्तर

7

आप उपयोग कर रहे प्रपत्र प्रणाली किस तरह के करीब होने लगते हैं? आप आसानी से digestive-functors साथ ऐसा कर सकते हैं, यहाँ मेरी पंजीकरण रूपों में से एक का एक उदाहरण है:

registrationForm = 
    Registration 
     <$> "username" .: text Nothing 
     <*> "password" .: passwordConfirmer 
    where passwordConfirmer = 
      validate fst' $ (,) <$> ("p1" .: text Nothing) 
           <*> ("p2" .: text Nothing) 
     fst' (p1, p2) | p1 == p2 = Success p1 
         | otherwise = Error "Passwords must match" 

यहां आप देख सकते मेरी passwordConfirmer प्रपत्र फ़ील्ड का उपयोग करके मैं अपने 'पासवर्ड' खाने के लिए मान उत्पन्न करते हैं। यह फ़ील्ड 2 टेक्स्ट फ़ील्ड्स का उपयोग करता है और उन्हें टुपल में रखता है, लेकिन सत्यापन के बाद यह fst तत्व लेता है (हालांकि यह snd ले सकता है, हमने गारंटी दी है कि वे बराबर हैं!)।

मेरे Registration प्रकार है:

data Registration = Registration 
    { regUserName :: Text 
    , regPassword :: Text 
    } 
+0

मैं yesods अनुप्रयोगी रूपों का उपयोग कर रहा है, लेकिन यह अच्छा जवाब भी है – Masse

संबंधित मुद्दे