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);
}
}