The new modular approach of ColdBox 4.0 means much of its built-in functionality has been moved to separate, installable modules. One of the many new modules introduced with ColdBox 4.0 is the Validation Module. To install, simply fire up CommandBox:
box install cbvalidation
This module replaces the previously-inbuilt validation functionality of ColdBox and the validator Plugin. The ValidationManager is still available under this WireBox mapping: ValidationManager@cbvalidation
. It gives you the following methods in every handler, view, layout, etc:
- validateModel()
- getValidationManager()
If you aren't familiar, ColdBox's Validation Module provides you with a unified approach to object validation. It is based it on several interfaces, so you can also use any validation framework in your ColdBox applications as long as they implement the required interfaces. Hyrule by Dan Vega is the easiest to port as it was the framework that inspired us. ColdBox validation allows you to declaratively specify validation rules for properties or fields in an object. The constraints can exist inside of the target object or you can define constraints in your ColdBox configuration file so you can reuse validation constraints or as we call them: shared constraints.
component persistent="true"{ ... // Validation this.constraints = { fname = { required = true }, lname = { required = true}, username = {required=true, size=6-10}, password = {required=true, size=6-8}, email = {required=true, type="email"}, age = {required=true, type="numeric", min=18} }; }
Below are all the currently supported constraints:
propertyName = { // required field or not, includes null values required : boolean [false], // specific type constraint, one in the list. type : (ssn,email,url,alpha,boolean,date,usdate,eurodate,numeric,GUID,UUID,integer,string,telephone, zipcode,ipaddress,creditcard,binary,component,query,struct,json,xml) // size or length of the value which can be a (struct,string,array,query) size : numeric or range, eg: 10 or 6..8 // range is a range of values the property value should exist in range : eg: 1..10 or 5..-5 // regex validation regex : valid no case regex // same as another property sameAs : propertyName // same as but with no case sameAsNoCase : propertyName // value in list inList : list // discrete math modifiers discrete : (gt,gte,lt,lte,eq,neq):value // UDF to use for validation, must return boolean accept the incoming value and target object, validate(value,target):boolean udf = variables.UDF or this.UDF or a closure. // Validation method to use in the target object must return boolean accept the incoming value and target object method : methodName // Custom validator, must implement coldbox.system.validation.validators.IValidator validator : path or wirebox id, example: 'mypath.MyValidator' or 'id:MyValidator' // min value min : value // max value max : value }
Add Your Comment
(1)
Apr 10, 2015 13:38:46 UTC
by Jim Priest
Since this is now installed via a module and no longer in the core this is incorrect: Custom validator, must implement coldbox.system.validation.validators.IValidator