W grze! ramy za pomocą SCALA powiedzieć, że mają taki kształt, jak następuje:Graj! framework 2.0: Sprawdź poprawność pola w formularzach używając innych pól
import play.api.data._
import play.api.data.Forms._
import play.api.data.validation.Constraints._
case class User(someStringField: String, someIntField: Int)
val userForm = Form(
mapping(
"someStringField" -> text,
"someIntField" -> number verifying(x => SomeMethodThatReceivesAnIntAndReturnsABoolean(x))
)(User.apply)(User.unapply)
)
gdzie SomeMethodThatReceivesAnIntAndReturnsABoolean
jest sposób, który wykonuje pewną logikę int się go walidacji.
Chciałbym jednak móc wziąć pod uwagę wartość someStringField
podczas sprawdzania poprawności someIntField
, czy istnieje sposób na osiągnięcie tego w formach ram gry? Wiem, że mogę zrobić coś takiego:
val userForm = Form(
mapping(
"someStringField" -> text,
"someIntField" -> number
)(User.apply)(User.unapply)
.verifying(x => SomeFunctionThatReceivesAnUserAndReturnsABoolean(x))
, a następnie będę mieć całą dostępną instancję użytkownika przekazaną do funkcji sprawdzania poprawności. Problem z tym podejściem polega na tym, że wynikowy błąd byłby związany z całą formą, a nie byłby powiązany z polem someIntField
.
Czy istnieje sposób na uzyskanie obu rzeczy, sprawdzanie poprawności pola za pomocą innego pola i zachowanie błędu związanego z określonym polem, które chcę sprawdzić, zamiast całego formularza?
To dziwne. Myślałem, że rzeczy takie jak wymaganie pewnego pola, gdy inne pole nie było puste, były czymś powszechnym i nie uznawano za skomplikowaną logikę. To dziwne, nikt wcześniej nie wpadł na to, zwłaszcza na grę! twórcy samych frameworków. –