Skip to content

Working with input data

Greg Bowler edited this page May 7, 2026 · 1 revision

The validator does not require one special request object. Instead, it accepts several useful input shapes and normalises them into a simple key/value structure internally.

That makes it easy to use with plain PHP, with PHP.GT/Input, and with custom request wrappers.

Accepted input types

Validator::validate() accepts:

  • associative arrays
  • iterable objects
  • ordinary objects with public properties
  • objects that implement an asArray() method

In practice, all of these are valid:

$validator->validate($form, $_POST);
$validator->validate($form, $input);
$validator->validate($form, (object)[
	"email" => "dev@example.com",
	"name" => "Ada Lovelace"
]);

Using PHP.GT/Input

If the application uses GT\Input\Input, we can pass it directly:

use GT\Input\Input;

function do_submit(Input $input):void {
	$validator->validate($form, $input);
}

That works because the validator can consume iterable objects and objects that expose array-like request data.

Field names must match form names

The validator matches submitted values to inputs by the name attribute.

<input name="email" type="email" required />
$validator->validate($form, [
	"email" => "dev@example.com",
]);

If the field name and the submitted key do not match, the validator will treat the field as empty or missing.

Checkbox names with []

Checkbox groups are commonly named like this:

<input type="checkbox" name="interest[]" value="php" />
<input type="checkbox" name="interest[]" value="css" />

The submitted PHP data is usually:

[
	"interest" => ["php", "css"],
]

DomValidation normalises the name attribute by stripping the trailing [] when looking up the submitted input, so this works naturally.

That means:

  • DOM name: interest[]
  • submitted key: interest

Multiple values

If the submitted value is an array, the validator converts each entry to a string internally.

That is mainly useful for checkbox groups and other repeated field names.

Object input

If an object is passed in, the validator checks it in this order:

  1. if it has an asArray() method, that is used
  2. if it is traversable, it is converted with iterator_to_array()
  3. otherwise its public properties are read

Non-scalar object properties are treated as empty strings.

This allows simple request DTOs to work without extra mapping glue.

A practical rule

Keep the submitted structure close to what the HTML form actually emits.

That way:

  • required checks behave as expected
  • checkbox arrays stay grouped correctly
  • custom rules that inspect other fields are easier to write

Once the input is accepted and validation fails, the next useful topic is Understanding validation errors.