All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
4.8.0 - 2025-10-17
- Copilot instructions added.
- Null values are now properly filtered out when
validateOrFailreturns validated struct/array results - Handle null values correctly when filtering constraints in nested structures and arrays
- GitHub Actions workflow fixes
4.7.0 - 2025-10-13
validateOrFailnow filters nested structs and arrays to only return keys matching constraints, not just top-level keys (PR #85)
4.6.0 - 2025-09-18
- Fix for cases where a non-empty value wasn't passing an
empty: falsevalidation check
- GitHub Actions update
- BoxLang PRIME
- Adobe 2025
4.5.0 - 2025-02-19
eurodatedoesn't event work in ACF/Lucee as it uses just a single standard. Remove it so the user can validate as they see fit.
- BoxLang certification
- Lucee 6, Adobe 2023
- Add
defaultValueto apply default values before constraints are checked
4.4.0 - 2023-10-16
- requiredIf accepts a UDF and closure now
- UDF validator now treats nulls correctly
4.3.1 - 2023-06-15
- Only perform type evaluation if target value is not null or empty string #75
4.3.0 - 2023-05-05
4.2.0 - 2023-04-14
- New github action versions and consolidation of actions
- New Contributing guidelines
- New github support templates
- The way custom validators are retrieved so they are ColdBox 7+ compatible
prgithub action now just does format checks to avoid issues with other repos.- Consolidated Adobe 2021 scripts into the server scripts
- Fix for
tasks.jsonfile to include no recursion - #71 - ValidationManager errors when returning
validatedKeysdue tosharedconstraintname - #45 -
Typevalidator needs to be able to validate againstanytype even if that is an empty string
- New ColdBox 7 delegate:
Validatable@cbValidationwhich can be used to make objects validatable - New validators:
notSameAs, notSameAsNoCase
- All date comparison validators now validate as
falsewhen the comparison target dates values are NOT dates instead of throwing an exception.
- Major bump of all dependencies
- New
InstanceOfvalidator thanks to @homestar9 : #65 - New virtual app testing and tuning
- Fix process result metadata replacements https://github.com/coldbox-modules/cbvalidation/pull/64/files thanks to @alessio-de-padova, when using full null support
- Dropped ACF2016
EmptyValidatorby @elpete. This validator is useful when a field is not required but if it exists it cannot be empty: #61- New module template updates and enhancements
- Update to use the new virtual app from ColdBox 6.7
- Allow UDF and Method Validators to Utilize Error Metadata by @homestar9 (#48)
- Date Comparisons Fail if Compare field is empty #58 thanks to @nockhigan: #58
- Migrations to github actions
- ACF2021 Support and automated testing
- Binary Type validator was not working by @nockhigan
- Formatting goodness by andreas.eppinger@webwaysag.ch
- Regression when doing global replacements for
validationData. It was changed to a!isStruct()but in reality, it has to be simple ONLY for replacements.
- New validator:
DateEqualswhich can help you validate that a target value is a date and is the same date as the validation date or other field - New validator:
Afterwhich can help you validate that a target value is a date and is after the validation date - New validator:
AfterOrEqualwhich can help you validate that a target value is a date and is after or equal the validation date - New validator:
Beforewhich can help you validate that a target value is a date and is before the validation date - New validator:
BeforeOrEqualwhich can help you validate that a target value is a date and is before or equal the validation date - New
onError( closure ), onSuccess( closure )callbacks that can be used to validate results using thevalidate()method and concatenate the callbacks. - New
assert()helper that can assit you in validating truthful expressions or throwing exceptions - Two new helpers:
validateIsNullorEmpty()andvalidateHasValueso you can do simple validations not only on objects and constraints. RequiredIf, RequiredUnlesscan now be declared with a simple value pointing to a field. Basically testing ifanotherFieldexists, or unlessanotherFieldexists.- New
BaseValidatorfor usage by all validators to bring uniformity, global di, and helpers.
- The
IValidatorremoves thegetName()since that comes from theBaseValidatornow. - The
UniqueValidatornow supports both creationg and update checks with new constraints. - Removed hard interface requirements to avoid lots of issues across CFML engines. Moved them to the
interfacesfolder so we can continue to document them and use them without direct compilation.
- Metadata for arguments did not have the right spacing for tosn of validators.
- Added the missing
rulesstruct argument to several validators that missed it.
- Migration to cbi18n 2.x series. This will require for you to update your cbi18n settings in your ColdBox configuration file and the modules that leverage cbi18n. Please see https://coldbox-i18n.ortusbooks.com/intro/release-history/whats-new-with-2.0.0#compatibility-updates on how to upgrade your application easily in about 5 minutes.
- New github latest changelog publish
- Quote all memento keys so they can preserve their casing
- Quote all metadata keys so they can preserve their casing
- Metadata for validations so the docs can be generated correctly
- New formatting rules
- New automation standards
- Automatic github publishing
- Deleted rogue UDFValidator embedded in the
validatorspath - fix for BOX-63 and BOX-68 9393c30 wpdebruin wil@site4u.nl
validationDatacannot be converted to a string for UDF,RequiredUnless,RequiredIf,Unique so they are excluded from this message replacement
feature: AddedconstraintProfilesto allow you to define which fields to validate according to defined profiles: #37feature: UpdatedRequiredUnlessandRequiredIfto use struct literal notation instead of the weird parsing we did.feature: Added theUniquevalidator thanks to @elpete!feature: All validators now accept arulesargument, which is the struct of constraints for the specific field it's validating onimprovement: Addednullsupport for theRequiredIf,RequiredUnlessvalidator values
- No more manual discovery of validators, automated registration and lookup process, cleaned lots of code on this one!
- New Validator:
Accepted- The field under validation must be yes, on, 1, or true. This is useful for validating "Terms of Service" acceptance. - New Validator:
Alpha- Only allows alphabetic characters - New Validator:
RequiredUnlesswith validation data as a struct literal{ anotherField:value, ... }- The field under validation must be present and not empty unless theanotherfieldfield is equal to the passedvalue. - New Validator:
RequiredIfwith validation data as a struct literal{ anotherField:value, ... }- The field under validation must be present and not empty if theanotherfieldfield is equal to the passedvalue. - Accelerated validation by removing type checks. ACF chokes on interface checks
- Consistency on all validators to ignore null or empty values except the
Requiredvalidator - Formatting consistencies
- Improve error messages to describe better validation
- Get away from
evaluate()instead useinvoke()
Bugs: Fixed lots of wrong type exceptionsCompat: Remove ACF11 support
bug: Addedfloatto the type validator which was missing
bug: This version's mixin is causing errors because its looking for this.validate() and its looking in the handler, not in the mixin file itself.
features:validateOrFail()new method to validate and if it fails it will throw aValidationException. Also if the target is an object, the object is returned. If the target is a struct, the struct is returned ONLY with the validated fields.feature:validateModel()is now deprecated in favor ofvalidate().validateModel()is now marked for deprecation.improvement: Direct scoping for performance an avoidance of lookup bugsimprovement: HTTPS protocol for everythingimprovement: Updated to testbox 3bug: Fix mapping declaration for apidocs`bug: Missing return onaddSharedConstraint()function
- Location protocol
- Updated to new layout
- UDFValidator added rejectedValue to newError arguments: https://github.com/coldbox-modules/cbvalidation/pull/29/files
- Removed lucee 4.5 support
- Mixins missing comma on arguments
- Switching evaluate to
invokefor security and performance - Fix for passing arguments in
newError()on the validation result object
- Build updates and travis updates
- Unified Workbench
MaxValidatorThe Max validator needs to better reflect that it can be less than or equal to the number to compare to <=MinValidatorThe explanation needs to better reflect the min validator which is >=- Allow custom validators to be specified just by key and the payload to be passed in as validation data
GenericObjectShould returnnullon non-existent keys instead of an exception if not we cannot validate nullness- You can now pass a list of fields to ONLY validate via
validate()methods using theincludeFieldsargument.
- Dependency updates
- Updated cbi18n dependency to latest
- Travis updates
- Type validator not countaing against 0 length values
- Size validator typos
- Migration to new github organization
- Updated cbi18n dependency to version 1.2.0
- SizeValidator not evaluating correctly non-required fields
- Travis integration
- Build script updates
- Added array validation thanks to Sana Ullah
- Exception on Lucee/Railo reporting wrong interface types when using imports
- Exception message was wrong on UDFValidator
- Ignore invalid validator keys, to allow for extra metadata and custom messages
- production ignore lists
- Unloading of helpers
- https://ortussolutions.atlassian.net/browse/CCM-21 Force the validation manager binder mapping
- https://ortussolutions.atlassian.net/browse/CCM-20 ValidationManager missing singleton persistance
- Create first module version