Skip to content

Latest commit

 

History

History
66 lines (47 loc) · 1.96 KB

untitled.md

File metadata and controls

66 lines (47 loc) · 1.96 KB

Unique Property Validation

We have also integrated a UniqueValidator from the validation module into our ORM module. It is mapped into WireBox as UniqueValidator@cborm so you can use in your model constraints like so:

{ fieldName : { validator: "UniqueValidator@cborm" } }

That's it! Once you define a property with this validator, then cbValidation will delegate to the cborm UniqueValidator so it can identify if the value is unique in the database. Below you can see an example entity that marks the userName property as unique for validation purposes.

{% code title="models/User.cfc" %}

component persistent="true" table="users"{

	property name="id" column="user_id" fieldType="id" generator="uuid";
	property name="firstName";
	property name="lastName";
	property name="userName" unique="true";
	property name="password";
	property name="lastLogin" ormtype="date";
	
	// M20 -> Role
	property name="role" cfc="Role" fieldtype="many-to-one" fkcolumn="FKRoleID" lazy="true" notnull="false";
	
	// DI Test
	property name="testDI" inject="model:testService" persistent="false" required="false";
	
	// Validation Constraints
	this.constraints = {
		"firstName" : { required = true },
		"lastName"  : { required = true },
		"userName"  : { required = true, validator="UniqueValidator@cborm" }
	};

}

{% endcode %}

Now here is a sample validation:

{% code title="handlers/users.cfc" %}

component{
    
    property name="userService" inject="entityService:User";
    
    function create( event, rc, prc ){
        var oUser = populateModel( "User" );
        var vResults = validateModel( oUser );
        
        if( !vResults.isValid() ){
            return event
                .setHTTPHeader( 400, "Invalid Data" )
                .renderData( type="json", data=vResults.getAllErrorsAsStruct() );
        }
        
        userService.save( oUser );
        
        return oUser.getMemento();
    }


}

{% endcode %}