@@ -100,7 +100,7 @@ func (r *Rule) Apply(v *Validation) (stop bool) {
100
100
return
101
101
}
102
102
103
- // has beforeFunc and it returns FALSE, skip validate
103
+ // has beforeFunc and it return FALSE, skip validate
104
104
if r .beforeFunc != nil && ! r .beforeFunc (v ) {
105
105
return
106
106
}
@@ -133,11 +133,12 @@ func (r *Rule) Apply(v *Validation) (stop bool) {
133
133
// get field value. val, exist := v.Get(field)
134
134
val , exist , isDefault := v .GetWithDefault (field )
135
135
136
- // value not exists but has default value
136
+ // not exists but has default value
137
137
if isDefault {
138
138
// update source data field value and re-set value
139
139
val , err := v .updateValue (field , val )
140
140
if err != nil {
141
+ // panicf(err.Error())
141
142
v .AddErrorf (field , err .Error ())
142
143
if v .StopOnError {
143
144
return true
@@ -147,7 +148,8 @@ func (r *Rule) Apply(v *Validation) (stop bool) {
147
148
148
149
// dont need check default value
149
150
if ! v .CheckDefault {
150
- v .safeData [field ] = val // save validated value.
151
+ // save validated value.
152
+ v .safeData [field ] = val
151
153
continue
152
154
}
153
155
@@ -159,14 +161,15 @@ func (r *Rule) Apply(v *Validation) (stop bool) {
159
161
160
162
// apply filter func.
161
163
if exist && r .filterFunc != nil {
162
- if val , err = r .filterFunc (val ); err != nil {
163
- v .AddError (filterError , filterError , field + ": " + err .Error ())
164
+ if val , err = r .filterFunc (val ); err != nil { // has error
165
+ v .AddError (filterError , filterError , err .Error ())
164
166
return true
165
167
}
166
168
167
169
// update source field value
168
170
newVal , err := v .updateValue (field , val )
169
171
if err != nil {
172
+ // panicf(err.Error())
170
173
v .AddErrorf (field , err .Error ())
171
174
if v .StopOnError {
172
175
return true
@@ -179,20 +182,26 @@ func (r *Rule) Apply(v *Validation) (stop bool) {
179
182
// save filtered value.
180
183
v .filteredData [field ] = val
181
184
}
182
-
183
- // empty value AND is not required* AND skip on empty.
185
+ // Todo: Update validation and filtering flow
186
+ if val != nil {
187
+ // Customization: We need to bind all data
188
+ v .safeData [field ] = val
189
+ }
190
+ // empty value AND skip on empty.
184
191
if r .skipEmpty && isNotRequired && IsEmpty (val ) {
185
192
continue
186
193
}
187
194
188
195
// validate field value
189
196
if r .valueValidate (field , name , val , v ) {
190
- v .safeData [field ] = val
197
+ if val != nil {
198
+ v .safeData [field ] = val // save validated value.
199
+ }
191
200
} else { // build and collect error message
192
201
v .AddError (field , r .validator , r .errorMessage (field , r .validator , v ))
193
202
}
194
203
195
- // Customization: To validate all the fields we need to continue iterating rather stopping on single error.
204
+ // Customization: To validate all the fields we need to continue iterating rather stopping on single error.
196
205
197
206
// stop on error
198
207
/*if v.shouldStop() {
0 commit comments