All pastes #42303 Raw Edit

Something

public text v1 · immutable
#42303 ·published 2006-02-20 20:31 UTC
rendered paste body
Validation Approach

 - Apply rules directly to the data model. This means somehow binding the validation/validators to the data model to allow streamlined validation. Also can be achieved by dynamically applying the rules to the data model, e.g. setValidators, setValidation.

-----------------------------------------------------------------------------

Granular Model:

(StringValidator, Addressvalidator, ZipcodeValidator) => UserModel

firstName => (PersonNameValidator, InvalidCharactersValidator)

-----------------------------------------------------------------------------

Aggregate Model: 

(StringValidator, Addressvalidator, ZipcodeValidator) >- UserValidator => UserModel

User => (UserValidator)


Try ~

interface Validatable
{

	public function validate($data);

}

abstract class Validator implements Validatable
{
	
	public $negate = false;
	public $required = false;
	public $messages = array('default' => 'Invalid value');

	abstract public function validate($value);

}

$vm = new ValidatorManager($request);

$v = new YValidator;
$v->required = true;
$v->messages['z_error'] = "Blah blah, Z, blah";
$v->messages['x_error'] = "Blah blah, Z, blah";
$vm->register(array('y_field', 'x_field'), $v);


abstract class Model implements Validatable, DomainObject
{


	abstract public function validate($data);

}

class SomeModel extends Model
{

	public function validate($data)
	{
	
        $vm = new ValidatorManager($data);

        $v = new YValidator;
        $v->required = true;
        $v->messages['z_error'] = "Blah blah, Z, blah";
        $v->messages['x_error'] = "Blah blah, X, blah";
        $vm->register(array('y_field', 'x_field'), $v);

	}

}