Skip to content

Kirby 3.9.8

invalid()

Runs a number of validators on a set of data and checks if the data is invalid

invalid(array $data = [ ], array $rules = [ ], array $messages = [ ]): array

Parameters

Name Type Default
$data array [ ]
$rules array [ ]
$messages array [ ]

Return type

array

Examples

$data = [
  'username' => 'Homer',
  'fname'    => 'Homer',
  'lname'    => 'Simpson',
  'email'    => 'home@simpsonscom',
  'gender'   => 'male'
];

$rules = [
  'username' => ['required'],
  'fname'    => ['required', 'minLength' => 3],
  'lname'    => ['required', 'maxLength' => 30],
  'email'    => ['required', 'email'],
  'gender'   => ['in' => [['male', 'female', 'non-binary', 'not specified']]]
];

$messages = [
  'fname' => 'Please enter a valid first name',
  'lname' => 'Please enter a valid last name',
  'email' => 'Please enter a valid email address'
];

if($invalid = invalid($data, $rules, $messages)) {
  dump($invalid);
} else {
  dump('Nice data!');
}

You can change these rules based on the type of data you want to obtain and use Kirby's validators or your own custom validators.

The syntax for the $rules array supports the following variants:

  • To use a validator without parameters, use the validator name as the array value: ['required']
  • To pass additional parameters to a validator, use the validator's name as the array key, and the parameter(s) as the value.
    • Scalar values can be passed directly:
      ['maxLength' => 20]
    • You can pass multiple parameters to the validator as an array:
      ['between' => [10, 100]]
    • To pass an array as a single parameter, use a nested array:
      ['in' => [['foo', 'bar']]]

You can also separately define a message for each validation rule:

$messages = [
  'fname' => 'Please enter a valid first name',
  'lname' => 'Please enter a valid last name',
  'email' => [
    'Please enter an email address',
    'The email address is invalid'
  ]
];

You can find an example of invalid() used to create pages from frontend in this recipe.