Skip to content

Defining Rules

Valicomb provides four syntaxes for defining validation rules. This page progresses from basic usage to advanced patterns.

SyntaxBest ForMethod
Field-Based ArrayGrouping all rules by fieldforFields()
Fluent Field BuilderIDE autocomplete, per-field contextfield()
Fluent Rule ChainAdding custom messages per rulerule()
Rule-Based ArrayApplying same rule to many fieldsrules()

Group by field with ->forFields(). This reads naturally as “for this field, apply these rules”:

$v = new Validator($_POST);
$v->forFields([
'email' => ['required', 'email', ['lengthMax', 254]],
'password' => [
'required',
['lengthMin', 8, 'message' => 'Password too short']
]
]);

Chain validation methods directly on fields with full IDE autocomplete support:

$v = new Validator($_POST);
$v->field('email')
->required()
->email()
->lengthMax(254);
$v->field('password')
->required()
->lengthMin(8);

Use message() and label() for customization:

$v->field('email')
->label('Email Address')
->required()->message('We need your email')
->email();

See the Fluent API page for the complete method reference.

Chain rules with ->rule(). Best for adding custom messages and labels inline.

$v = new Validator($_POST);
$v->rule('required', 'email')
->message('We need your email!')
->label('Email Address')
->rule('email', 'email')
->rule('lengthMin', 'password', 8);

Chain as many rules as needed on a single field:

$v = new Validator(['email' => 'test@example.com']);
$v->rule('required', 'email')
->rule('email', 'email')
->rule('lengthMax', 'email', 254);
$v->validate();

Group by rule type with ->rules(). Best when applying the same rule to many fields.

$v = new Validator($_POST);
$v->rules([
'required' => ['name', 'email', 'password'],
'email' => 'email',
'lengthMin' => [
['username', 3],
['password', 8, 'message' => 'Password too short']
]
]);

All syntaxes support inline custom messages using the 'message' key:

// Array syntaxes
['lengthMin', 8, 'message' => 'Password too short']
// Fluent syntax
$v->rule('lengthMin', 'password', 8)->message('Password too short');

See Error Messages for placeholders, labels, and more options.

All syntaxes support applying one rule to multiple fields:

// Fluent
$v->rule('required', ['email', 'name', 'password']);
// Array
$v->rules(['required' => ['email', 'name', 'password']]);

You can combine array and fluent syntaxes in the same validator:

$v = new Validator($_POST);
// Start with array syntax
$v->rules([
'required' => ['name', 'email'],
'email' => 'email'
]);
// Add more rules with fluent syntax
$v->rule('lengthMin', 'name', 2)
->rule('min', 'age', 18);

For developers migrating from Valitron, these deprecated method aliases are available:

// Deprecated - use forFields() instead
$v->mapFieldRules('email', ['required', 'email']);
$v->mapFieldsRules([...]);
$v->mapOneFieldToRules('email', [...]);