2012-08-24 13 views
7

Estoy intentando asimilar formularios de aplicación, y me he estado preguntando cómo implementar un formulario que valida campos que dependen de otros campos. Por ejemplo, un formulario de registro que tiene campos password y confirm_password y me gustaría validar que password == confirm_password.Validación que abarca múltiples campos

Podría hacerlo después de que se haya ejecutado el formulario, en el controlador, pero eso significaría perder mensajes de error.

Editar: se olvidó de mencionar, estoy utilizando principalmente Yesods formas aplicativas, pero parecen ser bastante cerca digestivos-funtores

Respuesta

7

¿Qué tipo de sistema de formulario está usando? Usted puede hacer esto con digestive-functors, esto es un ejemplo de uno de mis formularios de inscripción:

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" 

Aquí se puede ver que genero un valor para mi campo 'contraseña' mediante el uso de mi campo passwordConfirmer formulario. Este campo usa 2 campos de texto y los pone en una tupla, pero después de la validación solo toma el elemento fst (aunque podría tomar snd, ¡hemos garantizado que son iguales!).

Mi tipo Registration es:

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

estoy usando yesods formas aplicativas, pero esto es demasiado buena respuesta – Masse

Cuestiones relacionadas