Я изучаю Revel и использую пакет Validation для проверки ввода. Я хочу увидеть, существует ли уже запись с «именем» в БД (я получаю ввод от пользователя через форму), и если истинная ошибка возврата, иначе создайте запись. Я могу проверить (с помощью встроенных методов, таких как Required, Maxlen ...) поле и отобразить ошибку в HTML. Но для моей пользовательской проверки. Добавляет пользовательский валидатор в пакет валидации, или есть способ добавить пользовательские ключи и ошибку в контекст валидации. Я не мог найти, как добавить пользовательские ключи и сообщение на карту ошибок. Спасибо.
Проверка ввода формы в Revel
comment
ты пробовал читать мануал? revel.github.io/manual/validation.html Также может быть полезно подумайте, как закодированы валидаторы по умолчанию: github.com/revel/ revel / blob / Наконец, вы пытаетесь проверить ввод данных пользователем с помощью HTML-формы? Из вашего описания кажется неясным, как вы пытаетесь использовать функцию проверки Revel. Может быть, вы используете его не по назначению?
- person Brenden   schedule 30.10.2014
Ответы (1)
Интерфейс revel validators.Validator
выглядит так:
type Validator interface {
IsSatisfied(interface{}) bool
DefaultMessage() string
}
И у *validation.Validation
есть метод:
func (v *Validation) Check(obj interface{}, checks ...Validator) *ValidationResult
И у *validation.ValidationResult
есть метод:
func (*ValidationResult) Message
Собираем все вместе:
type usernameChecker struct {}
func(u usernameChecker) IsSatisified(i interface{}) bool {
s, k := i.(string)
if !k {
return false
}
/* check if s exists in DB */
}
func(u usernameChecker) DefaultMessage() string {
return "username already in use"
}
И в вашем приложении:
func (c MyApp) SaveUser(username string) revel.Result {
c.Validation.Check(username, usernameChecker{}).Message("more specific or translated message in case of failure")
}
Это одна, если не самая плохо спроектированная библиотека проверки, которую я когда-либо видел.
person
thwd
schedule
09.06.2014
А, хорошо, я сделал что-то подобное, но попытался вызвать валидатор напрямую через Validation. Я проверю это, спасибо. Согласитесь, что эта библиотека проверки запутана, я ищу веб-фреймворки для Golang и обнаружил, что Revel и Martini являются основными. Есть ли у вас какое-либо мнение о них или предложения?
- person broun; 10.06.2014
Почему вы ищете фреймворки? Просто используйте
net/http
; Больше нечего вам предложить.
- person thwd; 10.06.2014
@tomwilde, если вы можете улучшить интерфейс проверки, то почему бы не внести его в Revel? Я уверен, что даже в его нынешней форме он даст желаемый результат с меньшим количеством строк кода по сравнению с мешаниной из
if
условий и тому подобного.
- person Brenden; 30.10.2014
@Brenden, зачем мне участвовать в проекте, с которым я не согласен? Я не предлагаю if-else как решение. Просто констатирую, что дизайн плохой.
- person thwd; 30.10.2014
@Zahrec: Я еще не нашел его. Может, напишу что-нибудь свое. Посмотрим.
- person thwd; 22.07.2015
@thwd у вас небольшая опечатка. должно быть IsSatisfied, а не IsSatisified. Я должен признать, что мне потребовалось слишком много времени, чтобы понять, что я делаю не так
- person Eli DM; 28.05.2020