Conditional Rules
Conditional validation rules control when fields are required based on other field values.
Rules Reference
Section titled “Rules Reference”| Rule | Parameters | Example | Error Message |
|---|---|---|---|
nullable | — | $v->rule('nullable', 'field') | {field} can be null or must be valid |
optional | — | $v->rule('optional', 'field') | (always passes) |
requiredWith | fields, strict? | $v->rule('requiredWith', 'field', 'other') | {field} is required |
requiredWithout | fields, strict? | $v->rule('requiredWithout', 'field', 'other') | {field} is required |
Note: Parameters marked with
?are optional.
Behavior Comparison
Section titled “Behavior Comparison”| Rule | Missing Field | Null Value | Empty String |
|---|---|---|---|
optional | Skips validation | Validates | Skips validation |
nullable | Skips validation | Skips validation | Validates |
Parameter Details
Section titled “Parameter Details”requiredWith / requiredWithout
Section titled “requiredWith / requiredWithout”| Parameter | Type | Default | Description |
|---|---|---|---|
fields | string|array | — | Field(s) that trigger the requirement |
strict | bool | false | false = ANY field, true = ALL fields |
Examples:
// Required if ANY field present$v->rule('requiredWith', 'password', ['username', 'email']);
// Required if ALL fields present (strict mode)$v->rule('requiredWith', 'suffix', ['first_name', 'last_name'], true);
// Either/or validation$v->rule('requiredWithout', 'email', 'phone');$v->rule('requiredWithout', 'phone', 'email');Complete Examples
Section titled “Complete Examples”Valicomb supports two syntax styles: rule-based (map rules to fields) and field-based (map fields to rules).
Rule-Based Array Syntax
Section titled “Rule-Based Array Syntax”use Frostybee\Valicomb\Validator;
$v = new Validator($data);
$v->rules([ 'nullable' => [ ['parent_id'], ['manager_id'] ], 'optional' => [ ['middle_name'], ['bio'], ['website'] ], 'requiredWith' => [ ['shipping_street', 'use_different_shipping'], ['shipping_city', 'use_different_shipping'], ['shipping_zip', 'use_different_shipping'], ['card_cvv', 'card_number'] ], 'requiredWithout' => [ ['email', 'phone'], ['phone', 'email'] ]]);
$v->validate();Field-Based Mapping
Section titled “Field-Based Mapping”use Frostybee\Valicomb\Validator;
$v = new Validator($data);
$v->mapManyFieldsToRules([ 'email' => [['requiredWithout', 'phone'], 'email'], 'phone' => [['requiredWithout', 'email'], 'phone'], 'parent_id' => ['nullable', 'integer'], 'bio' => ['optional', ['lengthMin', 10], ['lengthMax', 500]], 'website' => ['optional', 'url'], 'shipping_street' => [['requiredWith', 'use_different_shipping']], 'shipping_city' => [['requiredWith', 'use_different_shipping']], 'shipping_zip' => [['requiredWith', 'use_different_shipping']], 'card_cvv' => [['requiredWith', 'card_number'], ['length', 3]]]);
$v->validate();