$v = Boar::create()
$v->field("name")->isRequired()->alphabetic()->maxLen(50)
$v->fields(["email", "address"])->areRequired()->maxLen(50)
$res = $v->validate($post_values)
if($res->hasErrors())
{
echo json_encode($res->errors);
}
$v->field("name")->maxLength(10)->withMessage("name should be shorter than {{max_length}}");
The message string is a template.
{{field}}
is replaced with the name of the field. For example,
"{{field}} is required."
when used with field address
becomes
"address is required"
.
The message template can contain values from the specific validation as well. For example, max_length
for MaxLength validation and min_length
for MinLength validation.
$v->field("name")->maxLength(10)->alphabetic();
$res = $v->validate([]); //No Error.
if name is a required field, should call isRequired() explicitly
$v->field("name")->isRequired()->maxLength(10)->alphabetic();
$res = $v->validate([]); //Error.
Similarly,
$v->field("weight")->min(100);
$res = $v->validate(["weight"=>"not a number"]); //No Error.
minimum validation will not validate for the data type. If the value is not number, it will silently ignore.
$v->field("weight")->isNumber()->min(100);
$res = $v->validate(["weight"=>"not a number"]); //Error.
Keeping the granularity of the validation helps in predictable behavior and reduces ambiguity.